Mongodb findAndModify()可以工作,但等效的update()不能';T

Mongodb findAndModify()可以工作,但等效的update()不能';T,mongodb,Mongodb,现有数据: {“posts”:[{“a”:{“t”:2}]} db.users.findAndModify({query:{“posts.a”:{“$exists”:true}},update:{“$push”:{“posts.$.a.test”:{“d”:2}}}) 命令后的数据:{“posts”:[{“a”:{“t”:2, “测试”:[{“d”:2}]}} 这是正确的。但是,完全相同的命令与update()不起作用: 输出:Thu Nov 24 12:07:02语法错误:无效的属性id(sh

现有数据: {“posts”:[{“a”:{“t”:2}]}

db.users.findAndModify({query:{“posts.a”:{“$exists”:true}},update:{“$push”:{“posts.$.a.test”:{“d”:2}}})

命令后的数据:{“posts”:[{“a”:{“t”:2, “测试”:[{“d”:2}]}}

这是正确的。但是,完全相同的命令与update()不起作用:

输出:Thu Nov 24 12:07:02语法错误:无效的属性id(shell):1


为什么不呢?

这在我看来像是一个语法错误:update方法使用四个参数、两个对象和两个布尔值,而不仅仅是一个对象。所以

db.users.update({{"posts.a": {"$exists" : true} }, 
                {"$push" : {"posts.$.a.test": {"d" : 2}}}, true, false })
应该读

db.users.update({"posts.a": {"$exists" : true} }, 
                {"$push" : {"posts.$.a.test": {"d" : 2}}}, true, false)

这看起来像是一个语法错误:update方法使用四个参数、两个对象和两个布尔值,而不仅仅是一个对象。所以

db.users.update({{"posts.a": {"$exists" : true} }, 
                {"$push" : {"posts.$.a.test": {"d" : 2}}}, true, false })
应该读

db.users.update({"posts.a": {"$exists" : true} }, 
                {"$push" : {"posts.$.a.test": {"d" : 2}}}, true, false)
它的更新({find},{update},upsert,multi)不是更新({find},{update},upsert,multi)它的更新({find},{update},upsert,multi)不是更新({find},{update},upsert,multi)