我的模型看起来像这样:
contacts: {
phones: [{
phone_id: {
type: ObjectId
},
phone_number: {
type: String
}
}],
shared: {
phones: [{
phone_id: {
type: ObjectId
},
phone_number: {
type: String
},
}]
}
}
我有一个端点,我试图删除与我在查询字符串中传递的ID匹配的电话号码。
我的代码如下所示:
Contacts.update({ 'phones._id': req.params.phone_id },
{ "$pull": { "phones": { "_id": req.params.phone_id} }},
{ safe: true, multi:true }, function(err, obj) {
});
Contacts.update({ 'shared.phones._id': req.params.phone_id },
{ "$pull": { "shared.phones": { "_id": req.params.phone_id} }},
{ safe: true, multi:true }, function(err, obj) {
});
从电话阵列中移除号码的第一次更新。
但第二个应该删除“共享电话”中的号码。数组没有。
对我失踪的事情有所了解吗?
我尝试使用' $'像这样定位运算符:
Contacts.update({ 'shared.phones.$._id': req.params.phone_id },
{ "$pull": { "shared.phones.$": { "_id": req.params.phone_id} }},
{ safe: true, multi:true }, function(err, obj) {
});
但这并没有奏效。
提前致谢!
答案 0 :(得分:1)
如评论中所述
{ $pull: { 'shared.phones._id': req.params.phone_id } }
当谈到嵌套数组时,总是使用all in one keys,因为mongodb不喜欢深入到多个级别。