流星:mongodb更新不起作用

Posted

技术标签:

【中文标题】流星:mongodb更新不起作用【英文标题】:Meteor: mongodb update not working 【发布时间】:2015-03-21 22:46:21 【问题描述】:

这个更新功能有什么问题?

fixrecs2 = function() 

      var arr = myColl.find( d: 1 ).fetch();

      for (var i = 0; i < arr.length; i++) 

       var code = arr[i].c;

       var rec = myOtherColl.findOne(  cc: code );

       if (rec) 

          c(rec._id)

          myOtherColl.update( _id: rec._ID ,  $set: dt: "ant"   ); 
       

  

console.log(i + " records processed.");

我以前从未以这种方式更新我的文档。检查控制台中的输出,我可以知道我希望找到的所有记录都在那里。我可以看到他们的 _id 值由 console.log() 打印。但是 dt 字段没有得到更新。在某些情况下,dt 字段已经存在,在某些情况下不存在,但 update 应该添加一个字段,如果它不存在,对吧?

我尝试添加回调,但它似乎没有运行。 (我一直无法为更新函数找到一个好的回调示例。)无论如何,根据文档,如果更新失败,我应该在控制台中收到一条错误消息。我仍在运行不安全的软件包,因此无需担心允许或拒绝规则。我真的被这个难住了!

【问题讨论】:

你试过myOtherColl.update( '_id' : rec._ID , $set: dt: "ant" ),在_id周围加引号吗? this 页面上的大多数示例都使用引号。还有一件事,你确定rec._ID 是一个ObjectID 吗? 当然,就是这样! objectID 字段是:_id 而不是 _ID。我在这一行中正确: c( rec._id ) 但不在更新命令中。感谢您发现这一点! 好的,我添加了一个答案来解决这个问题。 【参考方案1】:

本例中的问题,原来是一个简单的拼写错误,rec._IDrec._id 不同。由于 MongoDB 的 ObjectID 的通用大写,这可能被忽略了。

【讨论】:

以上是关于流星:mongodb更新不起作用的主要内容,如果未能解决你的问题,请参考以下文章

流星方法不起作用

Mongodb位置运算符不起作用

流星:如何备份我的 mongodb 数据库

findOneAndUpdate在mongodb / nodejs中不起作用

$push 在 MongoDb 中不起作用?

在 Mongo Db 中更新相关文档后 Spring 用户身份验证不起作用