如何替换MongoDB中的整个子文档数组?
以下是我的收藏中的示例文档:如何替换MongoDB中的整个子文档数组?,mongodb,mongodb-query,mongodb-.net-driver,Mongodb,Mongodb Query,Mongodb .net Driver,以下是我的收藏中的示例文档: Books [ id: 1, links: [ {text: "ABC", "url": "www.abc.com"}, {text: "XYZ", "url": "www.xyz.com"} ] ] 我想在一次更新操作中替换链接数组。以下是如何修改上述文档的示例: Books [ id: 1, links: [ {text: "XYZ", "url": "www.xyz.com"},
Books
[
id: 1,
links:
[
{text: "ABC", "url": "www.abc.com"},
{text: "XYZ", "url": "www.xyz.com"}
]
]
我想在一次更新操作中替换链接数组。以下是如何修改上述文档的示例:
Books
[
id: 1,
links:
[
{text: "XYZ", "url": "www.xyz.com"},
{text: "efg", "url": "www.efg.com"}, <== NEW COPY OF THE ARRAY
{text: "ijk", "url": "www.ijk.com"}
]
]
书籍
[
id:1,
链接:
[
{文本:“XYZ”,“url”:“www.XYZ.com”},
{text:“efg”,“url:“www.efg.com”},我认为你必须这样做:
var newArray=newbsonarray{
新的BSONDocument{{“text”,“XYZ”},{“url”,“www.XYZ.com”},
新的BSONDocument{{“text”,“efg”},{“url”,“www.efg.com”},
新的BSONDocument{{“text”,“ijk”},{“url”,“www.ijk.com”}
};
var update=update.Set(“links”,newArray);
收集、更新(查询、更新);
或者任何可以强制转换为有效BSONValue的方法
因此相当于壳牌:
{“链接”:[{“文本”:“abc”}]}
>db.collection.update(
{},
{$set:
{链接:[
{文本:“xyz”,url:“某物”},
{文本:“zzz”,url:“else”}
]}
})
>find({},{u id:0,links:1}).pretty()
{“链接”:[
{
“文本”:“xyz”,
“url”:“某物”
},
{
“文本”:“zzz”,
“url”:“其他”
}
]
}
这样就行了
很明显,除了嵌入式代码之外,你还需要其他东西。但希望这能让你走上正轨。我在这里是因为我在这篇文章上看到了5k个视图,我正在添加一些东西,可能会对其他寻找上述答案的人有所帮助
现在运行此查询以帮助替换旧数据
您使用运算符的方法是正确的。这将用您想要的任何内容替换整个字段,这在您的情况下是一个完全不同的数组。但是,现在无法使用精确的C#语法。@kheya这相当于shell语法中的$set运算符,它包含一个包含文档的整个数组。它应该可以工作k、 我不认为你真的在做这个,但也许在课堂上做些别的事情?
db.collectionName.insertOne({
'links': [
{
"text" : "XYZ",
"url" : "www.xyz.com"
}
]
});
db.collectionName.update(
{
_id: ObjectId("your object Id")
},
{
$set:
{
'links':[ {
"text" : "XYZ1",
"url" : "www.xyz.com1"
} ]
}
});