我想在 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同样的结果......
知道我做错了吗?
非常感谢
答案 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。