2014-10-02 4 views
2

Я пытаюсь использовать findAndModify с модулем Node.js MongoDB monk .Это метод, который я использую, это бросает ошибку 500 в моем cmd:MongoDB findAndModify не работает с монахом

notesCollection.findAndModify({_id:_id},[],{_id:_id,title:title,content:content},{'new':true,'upsert':true},function(err,doc){ 
    if(err) 
     console.error(err); 
    else 
    { 
     console.log("Find and modify successfull"); 
     console.dir(doc); 
    } 
}); 

I obtained the method signature here .Я получаю ошибку, которая выглядит, как это и неинформативные:

POST /notes/edit/542bdec5712c0dc426d41342 500 86ms - 1.35kb 

ответ

3

Monk реализует методы, которые в соответствие с синтаксисом оболочки для сигнатур методов, чем обеспечивается узлом родного диска р. Так что в этом случае «оболочка» документация для .findAndModify() больше подходит для здесь:

notescollection.findAndModify(
     { 
     "query": { "_id": id }, 
     "update": { "$set": { 
      "title": title, 
      "content": content 
     }}, 
     "options": { "new": true, "upsert": true } 
     }, 
     function(err,doc) { 
     if (err) throw err; 
     console.log(doc); 
     } 
); 

отметить также, что вы должны использовать оператор $set или posibly даже $setOnInsert оператора, где вы только хотите поля применяется, когда документ создано. Когда такие операторы применяют повторно , а не, то документ «целое» заменяется любым контентом, указанным для «обновления».

Вам также не нужно указывать поле «_id» в разделе обновления, так как даже когда происходит «восходящее», все, что присутствует в части запроса, подразумевается, что оно создается в новом документ.

Документация монаха также указывает на правильный синтаксис для использования для method signature.

0

Была такая же проблема, и хотя мне она понравилась, принятый ответ не сработал для меня.

Это не достаточно ясно, но документация намекает на правильный синтаксис, начиная с signatures:

  • Все команды принимают простой data[, …], fn.Например
    • findAndModify({}, {}, fn)

И от finding section:

users.findAndModify({ _id: '' }, { $set: {} });

Наконец, продолжая секции подписей:

  • Вы можете передать параметры в середине: data[, …], options, fn

Собираем все вместе:

collection.findAndModify({ 
    _id: '', 
}, { 
    $set: { 
     value: '', 
    }, 
}, { 
    upsert: true, 
}); 

Таким образом, в этом случае, data[, …] это объекты пара {}, {}: запрос и обновление. Затем вы можете добавить обратный вызов в качестве 4-го параметра в моем фрагменте.

Смежные вопросы