2016-04-25 66 views
0

我需要从mongo读取记录并从该记录添加基于信息的新领域(所以我不能做db.my.update()马上),我想出了这个代码:MongoDB是db.update更新记录的最简单方法吗?

var id = '5711298cf896b24fa1529d8e'; 
var cursor = db.my.find({_id: ObjectId(id)}) 

if (cursor.count() > 0) { 
    var rec = cursor.next(); 

    var id = rec._id.valueOf() 

    db.my.update({_id: ObjectId(id)}, {$set: {newField: 777}}); 
} 

它的工作原理,但我我正在看它,想知道这是否是最干净的方法? 我期待像

var id = '5711298cf896b24fa1529d8e'; 
var cursor = db.my.find({_id: ObjectId(id)}) 

if (cursor.count() > 0) { 
    var rec = cursor.next(); 
    rec.newField = 777; 
    db.my.update(rec); // or even rec.save(); 
} 

我错过了什么吗?

+0

难道你不能简单地做'db.my.update({_ id:ObjectId('5711298cf896b24fa1529d8e')},{$ set:{newField:777}});'? – chridam

+0

@chridam我在我的问题的第一行给出了答案。 – SmxCde

+0

应该没有必要先创建一个游标,[**'update' **](https://docs.mongodb.org/manual/reference/method/db.collection.update/#db- collection-update)操作符将使用查询作为更新的选择标准。与[**'find()'**](https://docs.mongodb.org/manual/reference/method/db.collection.find/#db.collection.find)方法相同的查询选择器是可用,所以光标不是必需的 – chridam

回答

0

所以,我现在还不能确定,这是最好的解决办法,但我想通了如何使TI更好看

var id = '5711298cf896b24fa1529d8e'; 

var cursor = db.my.find({_id: ObjectId(id)}) 

if (cursor.count() > 0) { 
    var rec = cursor.next(); 
    rec.newField = 777; 
    db.my.save(rec); 
} 

我会来到这个较早,但由于某些原因Robomongo搞糊涂了 - 如果你修改recprint()它 - 它不再显示_id,所以我不知道这是为什么。它出现原来mongo控制台不这样做。

此外,我想再次澄清:我不知道我能做到这一点就以这种方式

db.my.update({_id: ObjectId('5711298cf896b24fa1529d8e')}, {$set: {newField: 777}}); 

,但我的情况,我想学习如何与记录工作,如果你有,如果从光标,例如当你需要根据记录中的数据修改记录时,比如提取某些内容并将其放在单独的字段中。

相关问题