【问题标题】:Updating with modifier operators in the Mongo CLI works but not from node.js code using mongoose在 Mongo CLI 中使用修饰符运算符进行更新有效,但不能从使用 mongoose 的 node.js 代码进行更新
【发布时间】:2011-09-06 20:00:43
【问题描述】:

使用 CLI 连接到我们的 Mongo 实例,您可以使用更新修饰符操作符就好了:

db.users.update({nickname: 'mcoalson'}, { "$addToSet" : { room_ref : "b"}}) db.users.update({nickname: 'mcoalson'}, { "$addToSet" : { room_ref : "c"}}) db.users.findOne({昵称: 'mcoalson'}) { "_id" : ObjectId("4de5e9e982e9556c2a000003"), "昵称" : "mcoalson", “房间参考”:[ “一种”, "d", “乙”, “C” ] }

但是,在同一文档的 node.js 中执行完全相同的操作没有结果。

db.User.update({'nickname': 'mcoalson'}, {"$pullAll": {'room_ref': ["b"]}});
db.User.update({'nickname': 'mcoalson'}, {"$addToSet": {'room_ref': "f"}});

“房间参考”:[ “一种”, "d", “乙”, “C” ]

显然“b”没有被删除,“f”也没有被添加。我已经尝试了我能想到的所有可能的报价方案,但没有任何改变。我可以使用 node.js 代码中的 find() 和 findOne() 并且使用相同的凭据,有什么建议吗?

【问题讨论】:

  • 您确定数据库中只有 1 个昵称为“mcoalson”的文档吗?如果没有,您需要通过“多个”选项来一次更新多个文档。
  • 请确保您的猫鼬版本是最新的。 update 最近有很多错误修正:github.com/LearnBoost/mongoose/commits/master

标签: mongodb node.js mongoose


【解决方案1】:

我遇到了同样的问题,最终绕过了 mongoose 并使用了底层驱动程序,但没有出现问题。

所以不是

db.User.update(...)

用途:

db.User.collection.update(...)

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    抱歉耽搁了。

    mongo CLI 是同步的,node.js 是异步的。您是在使用发布的代码,还是有适当的回调?您的测试应如下所示:

    db.User.update({'nickname': 'mcoalson'}, {"$pullAll": {'room_ref': ["b"]}}, function(){
        db.User.findOne({'nickname': 'mcoalson'}, function(user){
            console.log('changed user:', user)
        })
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-19
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2012-08-23
      • 1970-01-01
      • 2021-07-15
      相关资源
      最近更新 更多