【问题标题】:mongodb update using positional operator $ removes other fields :使用位置运算符 $ 的 mongodb 更新删除了其他字段:
【发布时间】:2016-06-24 20:29:23
【问题描述】:

我有这个架构(MongoDb:3.2.6):

> db.arrObject.find().pretty()
{
        "_id" : ObjectId("576ce19479bd1761a560c14d"),
        "name" : "abcd",
        "addresses" : [
                {       "add1" : "a1",
                        "add2" : "a2",
                        "add3" : "a3"
                }
        ]
}
{
        "_id" : ObjectId("576ce19e79bd1761a560c14e"),
        "name" : "pqrs",
        "addresses" : [
                {
                        "add1" : "a1",
                        "add2" : "a2",
                        "add3" : "a3"
                }
        ]
}
>

我想要做什么:

我正在尝试用 a45 更新地址的 add2 字段。add1 = "a1" & name = "abcd" & 保持 add1 & add3 字段不变。

我做了什么:

db.arrObject.update( 
   {"name":"abcd","addresses.add1":"a1"},
   {$set:{"addresses.$" : {"add2":"a45"}}}
    )

我得到了什么:

> db.arrObject.find().pretty()
{
        "_id" : ObjectId("576ce19479bd1761a560c14d"),
        "name" : "abcd",
        "addresses" : [
                {
                        "add2" : "a45"
                }
        ]
}
{
        "_id" : ObjectId("576ce19e79bd1761a560c14e"),
        "name" : "pqrs",
        "addresses" : [
                {
                        "add1" : "a1",
                        "add2" : "a2",
                        "add3" : "a3"
                }
        ]
}
>

add1 & add3 字段已被删除。

我无权在更新语句中添加每个字段。 如何使用位置运算符更新字段并保持其他字段不变。

【问题讨论】:

  • 请参阅this 并请在您的问题中添加列表而不是屏幕截图。谢谢。
  • 您是否尝试过使用像db.arrObject.update({ "name": "abcd", "addresses.add1": "a1" },{ "$set": {"addresses.$.add2": "a45" } }) 这样的点符号?
  • @chridam 是的,我试过了,它有效。想知道语法的区别。
  • 不同的是,问题中指定的查询实际上替换了数组的值,而注释中指定的查询找到了指定的键并替换了它的值,而其他字段保持不变。

标签: mongodb


【解决方案1】:

只是总结了评论中提到的解决方案,以供他人受益。请使用点符号。示例如下:-

db.arrObject.update({ "name": "abcd", "addresses.add1": "a1" },{ "$set": {"addresses.$.add2": "a45" } })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 2015-07-30
    • 2017-05-17
    • 1970-01-01
    相关资源
    最近更新 更多