更新文档(快速) - MongoDB

时间:2015-06-03 22:54:37

标签: mongodb

考虑一下这个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]的更新方法?

2 个答案:

答案 0 :(得分:4)

来自JSON documentation

  

对象是一组无序的名称/值对。

因此绝对没有办法在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); 
});

如果您想知道为什么他们没有办法为人眼订购它,您必须记住数据库不是为了直接与之交互而设计的。它们应该与使用它们的应用程序一起使用,并以人性化的方式呈现数据。

我希望我能够充分回答你的问题,如果没有,请在下面发表评论,我会解释更多。