Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 将子文档移动到另一个文档_Mongodb - Fatal编程技术网

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

Mongodb 将子文档移动到另一个文档,mongodb,Mongodb,我正在为mongodb数据库建模,该数据库将包含类别和文章 最常见的用途是通过类别列出文章,因此我计划将这些文章作为类别的子文档: //db.categories.find() 有时,我可能会将文章从一个类别转移到另一个类别 在关系数据库中,我应该只更新一个外键,但是在上面的例子中,如何将一篇文章移动到另一个类别 一些细节: 最好是内部ObjectId保持不变。但这不是强制性的 文章还可能包含子文档,如果是这样,则它们必须在移动时出现 您需要首先获取文章,然后从当前类别中删除(拉取)文章,然后

我正在为mongodb数据库建模,该数据库将包含类别和文章

最常见的用途是通过类别列出文章,因此我计划将这些文章作为类别的子文档:

//db.categories.find()

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

在关系数据库中,我应该只更新一个外键,但是在上面的例子中,如何将一篇文章移动到另一个类别

一些细节:

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

您需要首先获取文章,然后从当前类别中删除(拉取)文章,然后将其添加(推送)到新类别中,如下所示:

首先从id为01的类别中获取文章(article_id:01)

然后从id为01的类别中拉出id为01的文章

然后将同一篇文章(article_id:01)推到id:02的新类别中

如果希望在推送之后对新类别中的数组进行排序,则必须使用$each和$sort()


有关$pull和$push的更多信息。

除了在阵列上操作之外,您在这里执行的操作与
$set
$unset
操作没有什么不同。我认为值得注意的是:A.一旦文章被拉入,它的数据就会被删除;B.拉入只是手动插入到数组中。我可以想象OP想要通过编程来移动文章,而不是复制粘贴mongo插件。不过,我可能弄错了。
[{
  "id": 01,
  "name": "Some category",
  "articles: [{
    "article_id": 01,
    "title": "",
    "content": ""
  }]
}]
db.categories.update(
    {"id" : 01, "articles.article_id" : 01},       // query
    {"$pull" : {"articles" : {"article_id" : 01}}} // pull
)
db.categories.update(
    {"id" : 02},                                   // query
    {"$push" : {"articles" : {                     // push
                              "article_id": 01,
                              "title": "",
                              "content": ""
                             }
               }
    }
)