2014-06-20 6 views
9

im a findAndModifiy in mongodb mit NodeJS zu tun versuchen, Dies ist mein Code:NodeJS und MongoDB FindAndModify() müssen entfernen oder aktualisieren

var nextBill = function (db, success, log) { 
    var collection = db.collection('autoincrements'); 
    log.debug('autoIncrementRepository', 'nextBill'); 
    var result = collection.findAndModify({ 
     query: { _id: 'auto' }, 
     update: { $inc: { bill: 1 } }, 
     new: true 
    }); 

    success(result.bill); 
}; 

EDIT:

mit Rückruf-Versuchen

collection.findAndModify({ 
     query: { _id: 'auto' }, 
     update: { $inc: { bill: 1 } }, 
     new: true 
    }, function (e, result) { 
     success(result.budget); 
    }); 

Aber gib mir den Fehler brauchen entfernen oder aktualisieren..Aber ich mache es ..

+0

Welche Treiber verwenden Sie? Der mongoische node-Treiber des MongoDB-Node erfordert einen Callback, also auch mongous, also auch Mönche und andere. –

+0

Nativer Treiber, aber mit Callback bekomme ich den gleichen Fehler :. Ich werde meinen Awnser mit meinem eigentlichen Code bearbeiten. – colymore

Antwort

17

Die .findAndModify() erfüllt hod in der nativen nativen Treiberimplementierung unterscheidet sich von der mongo Shell-Implementierung. Um ein Update zu tun, wie oben Sie tun:

collection.findAndModify(
    { "_id": "auto" }, 
    { "$inc": { "bill": 1 } }, 
    function(err,doc) { 
    // work here 

    } 
); 

Seltsamer etwas zu entfernen, die Sie in den Optionen festlegen, so wäre das gleiche „Entfernen“ des angepassten Dokument:

collection.findAndModify(
    { "_id": "auto" }, 
    { "$inc": { "bill": 1 } }, 
    { "remove": true }, 
    function(err,doc) { 
    // work here 

    } 
); 

Der Hauptunterschied ist Ihnen nicht nennen die "Schlüssel" -Abschnitte für die Aktionen.

+0

Danke, das funktioniert, aber warum haben sie sich von der Shell-Spezifikation unterschieden? Was sagen die Docs? – Aodh

+0

@Aodh die Shell-Spezifikation ist keine Spezifikation für Treiberimplementierungen. Die Dokumente, die Sie lesen, sind für Mongo selbst, nicht für den Treiber. Lesen Sie die Treiberdokumentation, die Sie hier finden: http://mongodb.github.io/node-mongodb-native/ – wallacer

+0

Hallo, bekomme immer noch Fehler, hier ist mein Code db.collection (nextIDCollection) .findAndModify ({"_ id": 1}, {$ inc: {"nextID": 1}}, Funktion (err, doc) {}); Ich konnte nicht finden, was mit dem Code falsch ist. –

6

http://mongodb.github.io/node-mongodb-native/2.0/api/Collection.html#findAndModify

Das obige Dokument gibt an, dass der zweite Parameter die Sortierreihenfolge für die Wahl ist das Dokument zu verwenden, wenn mehrere diejenigen mit der Abfrage übereinstimmen. Wenn nur zwei Parameter angegeben werden, wird die Fehlermeldung "muss entfernt oder aktualisiert werden" angezeigt.

collection('MyCollection').findAndModify(
    { _id: "auto" }, 
    [], 
    { $inc: { "bill": 1 } }, 
    { upsert: true, new: true }, 
    function(err,doc) { 
     // work here 
    } 
); 
2
Hi I have followed this and it worked perfectly. 

db.collection('test').findAndModify(
    {hello: 'world'}, // query 
    [['_id','asc']], // sort order 
    {$set: {hi: 'there'}}, // replacement, replaces only the field "hi" 
    {}, // options 
    function(err, object) { 
     if (err){ 
      console.warn(err.message); // returns error if no matching object found 
     }else{ 
      console.dir(object); 
     } 
    }); 
}); 
Verwandte Themen