考虑一下这个MongoDB文档:
{
"_id" : "RMa.103",
"official_name" : "Real Madrid Club de Fùtbol",
"country" : "Spain",
"started_by" : {
"day" : 6,
"month" : 3,
"year" : 1902
},
"stadium" : {
"name" : "Santiago Bernabeu",
"capacity" : 85454
},
"palmarès" : {
"La Liga" : 32,
"Copa del Rey" : 19,
"Supercopa de Espana" : 9,
"UEFA Champions League" : 10,
"UEFA Europa League" : 2,
"UEFA Super Cup" : 2,
"FIFA Club World cup" : 4
},
"uniform" : "white"
}
我忘了插入团队的重要信息:通用名称。 所以,我更新了文件:
[1] db.team.update({_id:"RMa.103"}, {$set:{common_name:"Real Madrid"}})
通过这种方式,新信息被添加到文档的末尾,而不是我想要在official_name之后:
{
"_id" : "RMa.103",
"official_name" : "Real Madrid Club de Fùtbol",
"common_name" : "Real Madrid"
.......
.......
.......
}
现在,我知道使用以下方法更新文档,我在正确的位置有团队的通用名称:
db.team.update(
{_id:"RMa.103"}, {$set:{ "_id" : "RMa.103",
"official_name": "Real Madrid Club de Fùtbol",
common_name:"Real Madrid", "country" : "Spain",
"started_by" : { "day" : 6, "month" : 3, "year" : 1902 },
"stadium" : { "name" : "Santiago Bernabeu", "capacity" : 85454 },
"palmarès" : { "La Liga" : 32, "Copa del Rey" : 19, "Supercopa de Espana" : 9,
"UEFA Champions League" : 10, "UEFA Europa League" : 2, "UEFA Super Cup" : 2,
"FIFA Club World cup" : 4 }, "uniform" : "white", "common_name" : "Real Madrid" }})
我必须更新很多文件,这种操作很难从提示的shell中解脱出来。有更快的方法来进行此更新吗?例如,是否可以更改[1]的更新方法?
答案 0 :(得分:4)
对象是一组无序的名称/值对。
因此绝对没有办法在JSON中强制执行任何类型的键顺序,因此MongoDB文档也是如此。
没用:任何MongoDB驱动程序都会给你一个给定键的相应值。关键顺序毫无意义。
答案 1 :(得分:0)
不,不是真的。您不应该按特定顺序拥有它。从应用程序查询时,它不关心您的值的顺序。例如:
db.collection("team").find({offical_name:"Real Madrid Club de Fùtbol"},function(err,results)
{
/*Gets the first result (should only be one)
and prints the common name*/
console.log(results[0].common_name);
});
如果您想知道为什么他们没有办法为人眼订购它,您必须记住数据库不是为了直接与之交互而设计的。它们应该与使用它们的应用程序一起使用,并以人性化的方式呈现数据。
我希望我能够充分回答你的问题,如果没有,请在下面发表评论,我会解释更多。