如何向现有集合中的每个文档添加新字段?

我知道如何更新现有文档的字段,但不知道如何向集合中的每个文档添加新字段.我怎么能在mongo贝壳里做到这一点?

推荐答案

Same as the updating existing collection field, $set will add a new fields if the specified field does not exist.

看看这个例子:

> 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" }

EDIT:

如果要向所有集合添加新的_字段,则必须使用空 Select 器,并将multi flag设置为true(last param)以更新所有文档

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

EDIT:

在上面的示例中,最后两个字段false, true指定upsertmulti标志.

Upsert:如果设置为true,则在没有文档与查询条件匹配时创建新文档.

Multi:如果设置为true,则更新满足查询条件的多个文档.如果设置为false,则更新一个文档.

这是2.2之前的Mongo versions.对于最新版本,查询有点变化

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

Mongodb相关问答推荐

如何在MongoDB中通过限制和跳过查找项进行匹配

Mongo DB-如果一个特定字段有多个文档匹配,则更新文档字段

MongoDB 投影按数组中的字符串长度排序

在数组对象 Mongodb 中仅 Select 需要的数组

如何获取mongodb ObjectId的值?

如何过滤查找mongodb的结果

在 MongoDB 中,如何使用对当前值进行操作的函数来更新嵌套文档的值?

CouchDB 或 MongoDB 中的哪一个适合我的需求?

从 node.js 的 mongodb 集合中删除文档

将 MongoDB BsonDocument 转换为字符串

解析命令行时出错:unrecognized option --rest

无法使用机器 ip 连接到 mongodb

MongoDB:在集合上设置 TTL 索引时出错: sessions

TypeError: object of type 'Cursor' has no len()

移动 MongoDB 的数据文件夹?

如何防止MongoDB在查找文档时返回对象ID?

如何使用 Pymongo 在 MongoDB 中 Select 单个字段?

通过 Java 执行 Mongo like Query (JSON)

Mongoid 不在查询中

MongoDb - 利用多 CPU 服务器进行写入繁重的应用程序