如何替换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"
                   } ]
         }
      });