将子文档移动到另一个文档

时间:2014-10-01 20:50:55

标签: mongodb

我正在为具有类别和文章的mongodb数据库建模。

最常见的用法是通过类别列出文章,因此我打算将文章作为类别的子文档:

// db.categories.find()

[{
  "id": 01,
  "name": "Some category",
  "articles: [{
    "article_id": 01,
    "title": "",
    "content": ""
  }]
}]

有时,我可能会将文章从一个类别移到另一个类别。

在关系数据库中,我应该只更新外键,但在上述情况下,如何将文章移动到另一个类别?

一些细节:

  • 最好,内部ObjectId应保持不变。但它不是强制性的。
  • 文章也可能包含子文档,如果是这样,它们必须在移动时出现。

1 个答案:

答案 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的更多信息。