如何使用powershell代码将文档添加到mongodb中的数组?

时间:2014-03-27 08:23:17

标签: arrays mongodb powershell

我想在 Powershell 中的另一个文档中将文档插入数组中。

e.g。

{
        "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)

这不起作用,因为在运行代码后数组为空,我尝试使用Add,Insert和Push同样的结果......

知道我做错了吗?

非常感谢

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

如果您使用推送操作或类似的操作,您应该在此之后调用save(),否则我认为您的文档不会被保存。 因此,您的数组将始终为null。