猫鼬更新深层阵列 [英] Mongoose update deep arrays

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

问题描述

尝试使用$ 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
    });
  }
}); 

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

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆