本文介绍了猫鼬更新深层阵列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
尝试使用$ 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
});
}
});
这篇关于猫鼬更新深层阵列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!