例如,我想将所有记录更新为"2012-01-01"("时间":ISODate("2011-12-31T13:52:40Z")).

db.test.update( { time : '2012-01-01' }, false, true  )

返回错误:

Assert failed : need an object
Error("Printing Stack Trace")@:0
()@shell/utils.js:35
("assert failed : need an object")@shell/utils.js:46
(false,"need an object")@shell/utils.js:54
([object Object],false,true)@shell/collection.js:189
@(shell):1

Wed Jan 11 17:52:35 uncaught exception: assert failed : need an object

推荐答案

您需要创建一个新的ISODate对象,如下所示:

db.test.insert({"Time" : new ISODate("2012-01-10") });

无论是更新还是查询都是如此.请注意,您的查询语法不正确,应该是

db.test.update({ criteria }, { newObj }, upsert, multi);

例如,要更新所有对象,请考虑

db.test.update( {}, { $set : { "time" : new ISODate("2012-01-11T03:34:54Z") } }, true, true);

还要注意的是,这与

db.test.update( {}, { "time" : new ISODate("2012-01-11T03:34:54Z") }, true, false);

因为后者将删除对象,而不是向现有文档添加新字段或更新现有字段.在本例中,我将最后一个参数更改为false,因为多次更新只适用于$个运算符.

Mongodb相关问答推荐

如何$匹配在命令列表中查找确切的命令

聚合管道可以用于更新数据库中的文档吗?

MongoDB 根据最新日期查询多个不同的值

DB.collection('comments').find() 不工作

DB 中的引用对象在 GraphQL 查询中返回 null

在 Mongo 聚合中,可以通过分组生成 3 个不同的计数

在 MongoDB 中打开连接的 SocketTimeout

更新 mongodb 文档中的特定字段

使用 MongoDB C# 驱动程序在嵌套数组上使用过滤器生成器进行查询

使用 nodejs/mongoose 部分更新子文档

使用 MongoDB 更新数组字段内的特定键/值

Spring Mongodb @DBREF

如何在 Mongoose 中更新数组值

嵌套数组内的Mongodb增量值

MongoDB count() 未定义

REACT 获取发布请求

遍历所有 Mongo 数据库

在 MongoDB 中插入或更新许多文档

MongoDB服务器仍然可以在没有凭据的情况下访问

如何仅通过一次调用将一组对象保存到mongoose数据库?