繁体   English   中英

更新数组 mongodb 内 object 内的字符串

[英]Update String inside object inside array mongodb

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

{

    "_id":{
        "$oid":"id"
    },
    "side1":[
        {
            "username":"test1",
            "id":"id1",
            
        },
        {
            "username":"test2",
            "id":"id2",
            
        },
        {
            "username":"test3",
            "id":"id3",
            
        }
       
    ],
    "side2":[
        {
            "username":"test4",
            "id":"id4",
            
        },
        {
            "username":"test5",
            "id":"id5",
            
        },
        {
            "username":"test6",
            "id":"id6",
            
        }
        
    ],


}

我希望能够搜索和更新其中一侧,例如,如果我使用用户名搜索 side1 并且该用户名将在那里,那么我将能够使用此用户名为 object 设置其他字段。 类似于: Search side1 username test1: $set result.id: "43242342"这会将用户名为 test1 的 object 的 ID 设置为 43242342。我不确定 go 如何执行此操作,我尝试使用$elemMatch 但这并没有带来任何结果。

Test.findOne({ id: id }, 
                
                { side1: { $elemMatch: {username: username} } }, function (err, result) {
                if (err) {
                    console.log(err);
                } else {
                    console.log(result)
                }
            });

我不太确定您想如何更新文档,但也许这就是您要找的东西?

db.collection.update({
  "_id": ObjectId("000000000000000000000001"),
  "side1.username": "test1"
},
{
  "$set": {
    "side1.$.id": "43242342"
  }
})

mongoplayground.net上试用。

示例更新文档:

[
  {
    "_id": ObjectId("000000000000000000000001"),
    "side1": [
      {
        "id": "43242342",
        "username": "test1"
      },
      {
        "id": "id2",
        "username": "test2"
      },
      {
        "id": "id3",
        "username": "test3"
      }
    ],
    "side2": [
      {
        "id": "id4",
        "username": "test4"
      },
      {
        "id": "id5",
        "username": "test5"
      },
      {
        "id": "id6",
        "username": "test6"
      }
    ]
  }
]

你能做这样的事情吗?

function addProperty(id, side, username, property, value) {
  const query = {
    _id: {
      $oid: id,
    },
  };

  const update = {
    $push: {
      [side]: {
        username: username,
        [property]: value,
      },
    },
  };

  const options = {
    upsert: true,
  };

  db.collection("Test").updateOne(query, update, options);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM