2014-06-20 14 views
9

im próbuje zrobić findAndModifiy w MongoDB z nodejS, jest to mój kod:NodeJS i MongoDB FindAndModify() trzeba usunąć lub zaktualizować

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:

Spróbuj z zwrotnego

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

Ale daj mi błąd, proszę, usuń lub zaktualizuj ... Ale im to robię ..

+0

Który kierowca używasz? Sterownik macierzysty węzła MongoDB wymaga wywołania zwrotnego, podobnie jak mangusta, tak samo robi mnich i inni. –

+0

Sterownik natywny, ale przy użyciu oddzwaniania otrzymuję ten sam błąd :. Będę edytować mój awnser z moim rzeczywistym kodem. – colymore

Odpowiedz

17

The .findAndModify() spełnione hod w implementacji sterownika natywnego węzła różni się od implementacji powłoki mongo. Aby wykonać aktualizację jak wyżej zrobić:

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

    } 
); 

dziwne nieco usunąć określić w opcji tak samo będzie „usuń” dopasowanego dokument:

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

    } 
); 

Główną różnicą jest nie wymienić sekcje "kluczowe" dla działań.

+0

Dzięki temu działa, ale dlaczego różniły się od specyfikacji powłoki/co mówią doktorzy? – Aodh

+0

@Aodh the shell spec nie jest specyfikacją dla implementacji sterowników. Dokumenty, które czytasz, dotyczą samego systemu Mongo, a nie sterownika. Przeczytaj dokumentację sterownika znajdującą się tutaj: http://mongodb.github.io/node-mongodb-native/ – wallacer

+0

Witam, nadal otrzymuję błąd, oto mój kod db.collection (nextIDCollection) .findAndModify ({"_ id": 1}, {$ inc: {"nextID": 1}}, funkcja (err, doc) {}); Nie mogłem znaleźć tego, co jest nie tak z kodem. –

6

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

Powyższa dokument określa, że ​​drugi parametr jest porządek na wybór, które do używania dokumentu, jeśli wielu z nich pasują do zapytania. Tylko podanie dwóch parametrów spowoduje komunikat o błędzie "potrzebujesz usunąć lub zaktualizować".

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); 
     } 
    }); 
}); 
Powiązane problemy