2016-02-29 107 views
1

我有一個集合(users):的MongoDB插入每一個文檔的文檔中包含像這樣的一些文件另一個集合

{ 
    _id: ObjectId("56d45406be05db4022be51f9"), 
    morecontent : "" 
}, 
{ 
    _id: ObjectId("56d45406be05db3021be32e3"), 
    morecontent : "" 
} 

我想爲user集合中每個項目創建一個新文檔。

{ 
    type: 'alert', 
    msg: 'This is important' 
} 

收集notifications應該是這個樣子: 的文件會從通知對象這樣創建

{ 
    _id: ObjectId("56d45406be05db3021bf20a1"), 
    someoldcontent: "This was here before the request" 
}, 
{ 
    _id : ObjectId("56d45406be05db4022be20b1"), 
    user: ObjectId("56d45406be05db4022be51f9"), 
    type: 'alert', 
    msg: 'This is important' 
}, 
{ 
    _id : ObjectId("56d45406be05db3021be32e3"), 
    user: ObjectId("56d45406be05db3021be32e3"), 
    type: 'alert', 
    msg: 'This is important' 
} 

有沒有辦法在MongoDB中要求做到這一點?

+0

你會爲DB-客戶端使用? (節點,Java的,C#)或者你想只是有一個查詢來執行該? – profesor79

+0

@ profesor79我會使用nodejs –

+0

我不確定我是否有問題 1.用戶執行操作 2.應用程序使用戶插入到通知集合_id – profesor79

回答

1

感謝professor79幫助我解決了很多問題。

經過大量的努力,查詢被發現。我們使用聚合框架才能成功。

唯一需要的2個聚合點是$project$out$out將自動處理notification文檔中新的_id

鑑於此集合名爲user

{ 
    _id: ObjectId("56d45406be05db4022be51f9"), 
    morecontent : "" 
}, 
{ 
    _id: ObjectId("56d45406be05db3021be32e3"), 
    morecontent : "" 
} 

我們想創建一個包含相同msgtype領域的user集合中的每個文件的通知。 每個通知將在notifications集合中作爲參考對應的userId

這裏是查詢取得這樣的成績:

db.user.aggregate([{$project: { "userId": "$_id", type: {"$literal" : "danger"}, "msg": {"$literal": "This is a message"}}}, {$out : "notifications"}]) 

notifications收集輸出:

{ 
    "_id" : ObjectId("56d6112e197b4ea11a87de1a"), 
    "userId" : ObjectId("56d45406be05db4022be51f9"), 
    "type" : "danger", 
    "msg" : "This is a message" 
} 
{ 
    "_id" : ObjectId("56d6112e197b4ea11a87de1b"), 
    "userId" : ObjectId("56d45406be05db3021be32e3"), 
    "type" : "danger", 
    "msg" : "This is a message" 
} 
2

因爲我們有一些聊天澄清的問題:

執行此操作的服務器端都需要採取的步驟:

  1. 第一步 - 比賽>讓用戶ID
  2. 項目ID來根據需要新增文件
  3. 出 - >通知集合中的存儲輸出
相關問題