我有以下名为Posts的mongodb集合,其文档如下:
{
"_id" : "111",
"comments" : [
{
"replyPost" : "aaaa",
"username" : "John Doe"
},
{
"replyPost" : "bbbb",
"username" : "Jane Smith"
},
{
"replyPost" : "cccc",
"username" : "Jane Smith"
},
{
"replyPost" : "dddd",
"username" : "Jane Smith"
}
]
}
我正在尝试使用replyPost删除数组项:“cccc”,结果将是:
{
"_id" : "111",
"comments" : [
{
"replyPost" : "aaaa",
"username" : "John Doe"
},
{
"replyPost" : "bbbb",
"username" : "Jane Smith"
},
{
"replyPost" : "dddd",
"username" : "Jane Smith"
}
]
}
我尝试使用$ pull参考mongodb文件的.update方法 https://docs.mongodb.com/manual/reference/operator/update/pull/
Posts.update(
{_id: this._id},
{ $pull: { comments: { replyPost:"cccc"} } }
);
似乎没有用。有谁能看到问题?
答案 0 :(得分:0)
看看你是否得到了正确的_id。它是字符串格式。
我在mongo shell中尝试过相同的操作。它对我有用。
这是日志:
> db.posts.insert({
... "_id" : "111",
... "comments" : [
... {
... "replyPost" : "aaaa",
... "username" : "John Doe"
... },
... {
... "replyPost" : "bbbb",
... "username" : "Jane Smith"
... },
... {
... "replyPost" : "cccc",
... "username" : "Jane Smith"
... },
... {
... "replyPost" : "dddd",
... "username" : "Jane Smith"
... }
... ]
... })
WriteResult({ "nInserted" : 1 })
> db.posts.update({_id:'111'},{$pull:{comments:{replyPost:'cccc'}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.posts.findOne()
{
"_id" : "111",
"comments" : [
{
"replyPost" : "aaaa",
"username" : "John Doe"
},
{
"replyPost" : "bbbb",
"username" : "Jane Smith"
},
{
"replyPost" : "dddd",
"username" : "Jane Smith"
}
]
}
答案 1 :(得分:0)
如果你使用的是猫鼬,你可以这样做:
db.posts.remove({replyPost: 'cccc'}, function(err) {
})
第一个参数可以是任何mongoose查询表达式。所有匹配都将从db中删除。
答案 2 :(得分:0)
经过测试的作品:
Posts.update((
{"_id" : "111"},
{ $pull: {comments: {"replyPost" : "cccc"}} },
{ multi: true }
)