2016-04-25 15 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}}); 
} 

それは動作しますが、Iそれを見て、本当にクリーンな方法ですか? 私は

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-コレクション更新)演算子は、更新の選択基準としてクエリを使用します。 [** '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()を修正してください。なぜそれが表示されないのですか?元mongoコンソールがそれをしていないように見えました。

また、私は再び明確にしたいと思います:私は、私はこの方法ですぐに

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

が、私の中のケースをそれを行うことができることを理解してからならば、あなたが得た場合、私は、レコードの操作方法を学びたいと思っそのレコードからのデータに基づいてレコードを変更する必要がある場合など、何かを抽出して別のフィールドに配置する場合などに使用します。

関連する問題