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是数组中的第一个元素,与之关联的值是第二个值。因此,唯一的解决方法是查找文档,检索设置数组,并通过在数组上迭代时进行字符串比较来查找地址。然后,您将更新文档中的值,然后更新集合中的整个文档。是的,我已经使用了您提出的模型。因此,我认为可以更轻松地执行此操作。谢谢你的帮助。我知道这个模式。您的解决方案对我的情况也没有帮助,因为它是双数组。我知道模式。您的解决方案对我的情况也没有帮助,因为它是双数组。