2014-03-27 37 views
0

我想將文檔插入另一個文檔中的數組中Powershell如何使用PowerShell代碼將文檔添加到MongoDB中的數組?

例如

{ 
     "1" : "A", 
     "2" : "B", 
     "3" : [ 
       { 
         "a" : "AA", 
         "_id" : ObjectId("5333b74c9e99569836bca41f") 
       } 
     ], 
     "_id" : ObjectId("5333b74c9e99569836bca41c") 
} 

這是我在mongodb shell中的文檔。

{ 
     "1" : "A", 
     "2" : "B", 
     "3" : [ ] 
     "_id" : ObjectId("5333b74c9e99569836bca41c") 
} 

,這是我在PowerShell代碼:

$embededDocument = new-object Mongodb.Bson.BsonDocument 
$embededDocument.Add("a", "AA") 
$embededDocument.Add("B2", "2") 
$embededDocument.Add("C2", "3") 

$parentDocument["3"].Add($embededDocument) 

這不是作爲數組工作爲空運行的代碼後,我嘗試使用添加,插入,並用同樣的結果推...

任何想法我做錯了什麼?

非常感謝你

回答

1

基本上你正在試圖做的是顯示了$push操作類型的更新,如圖所示的文件中。所以,你需要構建相同的排序BSON文檔的結構如圖中所示:

$query = [MongoDB.Driver.Builders.Query]::EQ("_id" : 
    [MongoDB.Bson.BsonObjectId]::Create("5333b74c9e99569836bca41c")) 

$doc = new-object MongoDB.Bson.Document 
$doc.Add("a", "AA") 

$inner = new-object MongoDB.Bson.Document 
$inner.Add("3", $doc) 

$update = new-object MongoDB.Bson.Document 
$update.Add('$push', $inner) 

$collection.update($query,$update) 

這出來的是這樣的等價物:

db.collection.update(
    { _id: ObjectId("5333b74c9e99569836bca41c") }, 
    { 
     "$push": { "3": { "a": "AA" } } 
    } 
) 

的MongoDB不數組元素中自動創建ObjectId值按照你所展示的方式。如果你想創建它們,那麼你需要添加字段並自己創建ObjectId值。

對於任何其他參考,請使用C# documentation,它基本上是您使用powershell的API。

+0

解決了我的問題+1 – Disposer

0

如果您使用push操作或類似的操作,則應該在此之後調用save(),否則我認爲您的文檔不會被保存。 因此,您的數組將始終爲空。

相關問題