我有一个如下所示的模型:
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) {
});
从电话数组中删除号码的第一个更新有效。
但是第二个应该从“shared.phones”数组中删除号码的方法却没有。
知道我缺少什么吗?
我尝试使用“$”定位运算符,如下所示:
Contacts.update({ 'shared.phones.$._id': req.params.phone_id },
{ "$pull": { "shared.phones.$": { "_id": req.params.phone_id} }},
{ safe: true, multi:true }, function(err, obj) {
});
但这并没有那么有效。
提前致谢!
最佳答案
正如评论中所说
{ $pull: { 'shared.phones._id': req.params.phone_id } }
当涉及到嵌套数组时,总是使用 all in one 键,因为 mongodb 不喜欢嵌套超过一层。
关于node.js - 无法 $pull 形式嵌入对象中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47458342/