相关疑难解决方法(0)

使用MongoDB更新嵌套数组

我试图更新嵌套数组中的值,但无法使其工作.

我的目标是这样的

 {
    "_id": {
        "$oid": "1"
    },
    "array1": [
        {
            "_id": "12",
            "array2": [
                  {
                      "_id": "123",
                      "answeredBy": [],
                  },
                  {
                      "_id": "124",
                      "answeredBy": [],
                  }
             ],
         }
     ]
 }
Run Code Online (Sandbox Code Playgroud)

我需要将值推送到"answersBy"数组.

在下面的例子中,我尝试将"success"字符串推送到"123 _id"对象的"answersBy"数组,但它不起作用.

callback = function(err,value){
     if(err){
         res.send(err);
     }else{
         res.send(value);
     }
};
conditions = {
    "_id": 1,
    "array1._id": 12,
    "array2._id": 123
  };
updates = {
   $push: {
     "array2.$.answeredBy": "success"
   }
};
options = {
  upsert: true
};
Model.update(conditions, updates, options, callback);
Run Code Online (Sandbox Code Playgroud)

我找到了这个链接,但它的答案只说我应该使用类似对象的结构而不是数组.这不适用于我的情况.我真的需要我的对象嵌套在数组中

如果你能在这里帮助我会很棒.我花了好几个小时来搞清楚这一点.

先感谢您!

javascript mongoose mongodb node.js mongodb-query

30
推荐指数
2
解决办法
2万
查看次数

在Mongodb中更新嵌入式文档属性

我有一个看起来像这样的文档:

{
    "_id": 3,
    "Slug": "slug",
    "Title": "title",
    "Authors": [
        {
            "Slug": "slug",
            "Name": "name"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我想基于Authors.Slug更新所有Authors.Name.我尝试了这个,但它不起作用:

.update({"Authors.Slug":"slug"}, {$set: {"Authors.Name":"zzz"}});
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

mongodb

28
推荐指数
1
解决办法
2万
查看次数

C# mongodb - 如何更新嵌套数组元素

我有以下表示项目的 JSON 结构

{
    Id: "a",
    Array1: [{
        Id: "b",
        Array2: [{
            Id: "c",
            Array3: [
                {...}
            ]
        }]
    }]
}
Run Code Online (Sandbox Code Playgroud)

我需要能够Array2用新项目替换数组元素或仅用Array3新数组替换。

这是我替换数组项的代码Array2

await Collection.UpdateOneAsync(
    item => item.Id.Equals("a") &&
    item.Array1.Any(a => a.Id.Equals("b")) &&
    item.Array1[-1].Array2.Any(b => b.Id.Equals("c")),
    Builders<Item>.Update.Set(s => s.Array1[-1].Array2[-1], newArray2Item)
);
Run Code Online (Sandbox Code Playgroud)

执行此代码时,我收到此错误:

"A write operation resulted in an error.
 Too many positional (i.e. '$') elements found in path 'Array1.$.Array2.$'"
Run Code Online (Sandbox Code Playgroud)

这里是我的代码来替换Array3Array2

await Collection.UpdateOneAsync(
        item => item.Id.Equals("a") &&
        item.Array1.Any(a => a.Id.Equals("b")) && …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-.net-driver

4
推荐指数
1
解决办法
4827
查看次数