Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb更新语句_Mongodb_Insert Update - Fatal编程技术网

mongodb更新语句

mongodb更新语句,mongodb,insert-update,Mongodb,Insert Update,我有一份简单的文件: /* 1 */ { "_id" : "9cbfceec-d6f6-5638-b7c9-49103dc39665", "Settings" : [ [ "Storage", "Dedicated" ], [ "Country", "EE" ], [

我有一份简单的文件:

 /* 1 */
{
    "_id" : "9cbfceec-d6f6-5638-b7c9-49103dc39665",
    "Settings" : [ 
        [ 
            "Storage", 
            "Dedicated"
        ], 
        [ 
            "Country", 
            "EE"
        ], 
        [ 
            "Address", 
            "http://localhost:55557"
        ], 
        [ 
            "Number", 
            "05"
        ]
    ]
}

无法理解如何编写update语句来更新地址信息
“http://localhost:55557“
到IP地址。类似于
http://10.10.20.2:66667

架构设计不正确,因为没有要更新的值的键。考虑将模式更改为

{
_id : "9cbfceec-d6f6-5638-b7c9-49103dc39665",
settings : 
    {  
        storage:"Dedicated", 
        country:"EE",
        address:"http://localhost:55557",
        number:"05"
    }
}
db.settings.update({
  _id: "9cbfceec-d6f6-5638-b7c9-49103dc39665"
}, {
  $set: {
    "settings.address": "http://10.10.20.2:66667"
  }
});
上面的模式对设置中的每个值都有键,而不是双数组。在上述文档中,任何值都可以访问和编辑

然后,您可以按如下方式更新文档

{
_id : "9cbfceec-d6f6-5638-b7c9-49103dc39665",
settings : 
    {  
        storage:"Dedicated", 
        country:"EE",
        address:"http://localhost:55557",
        number:"05"
    }
}
db.settings.update({
  _id: "9cbfceec-d6f6-5638-b7c9-49103dc39665"
}, {
  $set: {
    "settings.address": "http://10.10.20.2:66667"
  }
});

架构设计不正确,因为没有要更新的值的键。考虑将模式更改为

{
_id : "9cbfceec-d6f6-5638-b7c9-49103dc39665",
settings : 
    {  
        storage:"Dedicated", 
        country:"EE",
        address:"http://localhost:55557",
        number:"05"
    }
}
db.settings.update({
  _id: "9cbfceec-d6f6-5638-b7c9-49103dc39665"
}, {
  $set: {
    "settings.address": "http://10.10.20.2:66667"
  }
});
上面的模式对设置中的每个值都有键,而不是双数组。在上述文档中,任何值都可以访问和编辑

然后,您可以按如下方式更新文档

{
_id : "9cbfceec-d6f6-5638-b7c9-49103dc39665",
settings : 
    {  
        storage:"Dedicated", 
        country:"EE",
        address:"http://localhost:55557",
        number:"05"
    }
}
db.settings.update({
  _id: "9cbfceec-d6f6-5638-b7c9-49103dc39665"
}, {
  $set: {
    "settings.address": "http://10.10.20.2:66667"
  }
});

chirdam
对模式的看法是正确的

如果您没有创建新架构的准备,可以尝试以下操作:

请尝试以下查询:

db.yourCollection.update({"_id" : "9cbfceec-d6f6-5638-b7c9-49103dc39665", "Settings.Address" : "http://localhost:55557"} , { $set : {"Settings.$.Address" : "http://10.10.20.2:66667"}});

或者使用
RoboMongo
手动编辑您的收藏

chirdam
是正确的模式

如果您没有创建新架构的准备,可以尝试以下操作:

请尝试以下查询:

db.yourCollection.update({"_id" : "9cbfceec-d6f6-5638-b7c9-49103dc39665", "Settings.Address" : "http://localhost:55557"} , { $set : {"Settings.$.Address" : "http://10.10.20.2:66667"}});

或者使用
RoboMongo
手动编辑您的收藏

这样的模式在MongoDB中很难查询和更新。考虑修改架构,使嵌入的数组平坦化为具有适当字段/值配对的文档。如果不能用适当的字段/值对来修复,则CHIDIDAM-我不能更新模式。我知道这不是一个好的模式,这种模式在MongoDB中很难查询和更新。考虑修改架构,使嵌入的数组平坦化为具有适当字段/值配对的文档。如果不能用适当的字段/值对来修复,则CHIDIDAM-我不能更新模式。我知道这不是一个好的解决方案。如果模式是好的,您提出的解决方案应该可以工作。但它不能解决我使用双数组的问题。我无法修改架构。无法直接访问地址,因为地址不是键。Address是数组中的第一个元素,与之关联的值是第二个值。因此,唯一的解决方法是查找文档,检索设置数组,并通过在数组上迭代时进行字符串比较来查找地址。然后,您将更新文档中的值,然后更新集合中的整个文档。是的,我已经使用了您提出的模型。因此,我认为可以更轻松地执行此操作。感谢您的帮助。如果架构良好,您建议的解决方案应该可以工作。但它不能解决我使用双数组的问题。我无法修改架构。无法直接访问地址,因为地址不是键。Address是数组中的第一个元素,与之关联的值是第二个值。因此,唯一的解决方法是查找文档,检索设置数组,并通过在数组上迭代时进行字符串比较来查找地址。然后,您将更新文档中的值,然后更新集合中的整个文档。是的,我已经使用了您提出的模型。因此,我认为可以更轻松地执行此操作。谢谢你的帮助。我知道这个模式。您的解决方案对我的情况也没有帮助,因为它是双数组。我知道模式。您的解决方案对我的情况也没有帮助,因为它是双数组。