我有一个集合,其中包含一个对象数组-每个对象都有一个唯一ID- 我希望能够从数组中删除一项-或特定记录。 我有没有错误的代码-但它不会从数组中删除对象。
收藏结构
_id:
,username:
,prefs: [
_id:
,title:
]
喜欢数据外观
_id: 5a...46,
username: "bobsmith",
prefs: [
{
_id: 5...a,
composition_title: "blah 1"
}
,{
_id: 5 c...2,
composition_title: "blah 2"
}
,{
_id: 5 c...c,
composition_title: "blah 3"
}
]
代码:
module.exports.removeUserPref = function (uid, pid, callback) {
User.update(
{
'_id': mongoose.Types.ObjectId(uid)
},
{
$pull: { pref: { $elemMatch: { _id: mongoose.Types.ObjectId(pid) } } }
}
, callback);
}
我知道我要传递的用户ID是正确的,我要传递的首选ID是数组中的IS-但我的响应是:“ nModified”:0,没有删除的项目
{
"n": 1,
"nModified": 0,
"opTime": {
"ts": "6641391849170796549",
"t": 4
},
"electionId": "7fffffff0000000000000004",
"ok": 1,
"operationTime": "6641391849170796549",
"$clusterTime": {
"clusterTime": "6641391849170796549",
"signature": {
"hash": "sBXjaw1nw99+cfMIMVNq5KtCpt8=",
"keyId": "6596828466803376130"
}
}
}
答案 0 :(得分:1)
$elemMatch
是query
和projection
运算符。与update operators
无关。
所以尝试做这样的事情
User.update(
{ "_id": mongoose.Types.ObjectId(uid) },
{ "$pull": { "pref": { "_id": mongoose.Types.ObjectId(pid) } } }
)