本文介绍了猫鼬更新深层阵列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试使用$ set更新数组中的文档,但似乎需要以其他方式完成它.这是我正在尝试的代码:

Trying to update a document in an array using $set but it looks like it needs to be done a different way. Here is the code I am trying:

Schema.update({ _id: id, 'customers._id': customerID }, { $set: {
    'customers.$.addresses.isDefault': false
  }}, function (err) {
    if (err) // err
    // do something
});

似乎不喜欢'customers.$.addresses.isDefault'.我的数据如下:

It looks like it doesn't like 'customers.$.addresses.isDefault'. My data looks like this:

{
  _id: ObjectId,
  customers: [{
    _id: ObjectId,
    addresses: [{
      _id: ObjectId,
      isDefault: Boolean
    }]
  }]
}

我正在尝试将该客户的所有地址的isDefault设置为false.

I am trying to set isDefault for ALL addresses on that customer to false.

更新:这是它给我的错误:MongoError:无法使用零件(customers.0.addresses.isDefault的地址)遍历元素

UPDATE: Here is the error it gives me:MongoError: cannot use the part (addresses of customers.0.addresses.isDefault) to traverse the element

推荐答案

最终只是遍历数组:

Schemas.Client.findOne({ _id: id, 'customers._id': customerID }).select('customers.$.addresses').exec(function (err, client) {
  if (err) { return next(err); }
  if (!client) { return next(); }
  if (client.customers[0].addresses.length) {
    var addresses = client.customers[0].addresses;
    for (var i = 0; i < addresses.length; i++) {
      addresses[i].isDefault = false;
    }
    client.save(function (err) {
      if (err) { return next(err); }
      // finish
    });
  }
});

这篇关于猫鼬更新深层阵列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-26 04:13
查看更多