2014-10-01 159 views
1

我正在建模將有類別和文章的mongodb數據庫。將子文檔移動到另一個文檔

最常見的用途將通過上市類別的文章,所以我打算讓文章的類別的子文檔:)

//db.categories.find(

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

有時候,我可能會將文章從一個類別移到另一個類別。

在關係數據庫中,我應該只更新一個外鍵,但在上述情況下,如何將文章移動到另一個類別?

一些細節:

  • 優選,內部ObjectId應保持不變。但這不是強制性的。
  • 文章可能還包含子文檔,如果是這樣,他們必須在移動時纔會出現。

回答

0

你需要先拿到一篇文章,然後從當前類別中刪除(拉)的文章,然後添加(推)成其新的品類,像這樣:

先把文章(article_id的:01)從類別與ID:01 ...

再拉與article_id的文章:01從類別與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": "" 
          } 
       } 
    } 
) 

,如果你想在新的類別的陣列進行後整理推你必須使用$每個$排序see here)。

欲瞭解更多信息有關$拉check here和更多信息的$推check here

+0

除了你在數組上操作的事實之外,你在這裏做的事情看起來與'$ set'和'$ unset'操作沒有什麼不同。我認爲值得注意的是:A.一旦文章被拉下來,它的數據被刪除,並且B.拉動只是手動插入到數組中。我會想象OP想要以編程方式移動文章,而不是複製粘貼mongo插入。但我可能會誤解。 – eggmatters 2017-07-06 20:47:23

相關問題