我正在为具有类别和文章的mongodb数据库建模。
最常见的用法是通过类别列出文章,因此我打算将文章作为类别的子文档:
// db.categories.find()
[{
"id": 01,
"name": "Some category",
"articles: [{
"article_id": 01,
"title": "",
"content": ""
}]
}]
有时,我可能会将文章从一个类别移到另一个类别。
在关系数据库中,我应该只更新外键,但在上述情况下,如何将文章移动到另一个类别?
一些细节:
ObjectId
应保持不变。但它不是强制性的。答案 0 :(得分:0)
首先需要获取文章,然后从当前类别中删除(拉出)文章,然后将其添加(推送)到新类别中,如下所示:
首先从 id:01 ...
的类别中获取文章( article_id:01 )然后从 id <01>
的类别中用 article_id:01 拉出文章db.categories.update(
{"id" : 01, "articles.article_id" : 01}, // query
{"$pull" : {"articles" : {"article_id" : 01}}} // pull
)
然后将同一篇文章( article_id:01 )推送到新类别 id:02 ,
db.categories.update(
{"id" : 02}, // query
{"$push" : {"articles" : { // push
"article_id": 01,
"title": "",
"content": ""
}
}
}
)
如果您希望在推送后对新类别中的数组进行排序,则必须使用 $ each 和 $ sort (see here)。< / p>
有关 $ pull check here的更多信息以及有关 $ push check here的更多信息。