添加新字段到MongoDB中的集合

我无法find如何添加一个新的字段到现有的集合。

我知道如何更新现有集合的字段,但不知道如何在集合中添加新的不存在的字段。 另外,如何将新字段添加到所有集合的文档?

与更新现有集合字段相同,如果指定字段不存在, $ set将添加新字段。

查看样本

> db.foo.find() > db.foo.insert({"test":"a"}) > db.foo.find() { "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" } > item = db.foo.findOne() { "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" } > db.foo.update({"_id" :ObjectId("4e93037bbf6f1dd3a0a9541a") },{$set : {"new_field":1}}) > db.foo.find() { "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "new_field" : 1, "test" : "a" } 

编辑:

如果你想添加一个new_field到你的所有集合,你必须使用空select器,并设置multi标志为true(最后一个参数)来更新所有的文档

db.your_collection.update({},{$ set:{“new_field”:1}},false,true)

编辑:

在上面的例子中,最后2个字段为false, true指定了upsertmulti标志。

Upsert:如果设置为true,则在没有文档匹配查询条件时创build一个新文档。

多:如果设置为true,则更新符合查询条件的多个文档。 如果设置为false,则更新一个文档。

这是2.2之前的Mongo versions 。 对于最新版本,查询有所改变

 db.your_collection.update({}, {$set : {"new_field":1}}, {upsert:false, multi:true})