2014-10-01 3 views
0

В следующей команде, где foos представляет собой сборник, я «upsert» новый пункт:Как получить документ, который был только что обновлен в mongodb?

foos.update(criteria, 
    { $set: fooUpdate }, 
    { w: 1, upsert: true }, 
    function(err, upsertedFoo) { 
    /* upsertedFoo is actually just count of updated/ inserted rows */ 
} 

Я хотел бы получить новый документ, который был только что создан (если это обновление), или существующий документ, который был изменен (если он был обновлен). Если это невозможно, то также будет достаточно _id.

Как я могу это получить?

ПРИМЕЧАНИЕ: Я использую стандартный пакет mongodb.

+0

@ wizard findAndModify работает с upsert? – bguiz

ответ

0

Обратный вызов функции update даст вам обновленный документ. Например:

foo.update(conditions, document, options, function(err, result) { 
    if (err) 
    throw new Error(err); 
    console.dir(result); 
} 
+0

Дело в том, что я делаю upsert, что не совсем то же самое, что и обновление. – bguiz

0

Я нашел это на docs:

// Simple findAndModify command performing an upsert and returning the new document 
// executing the command safely 
collection.findAndModify({d:1}, [['b', 1]], 
    {d:1, f:1}, {new:true, upsert:true, w:1}, function(err, doc) { 
    assert.equal(null, err); 
    assert.equal(1, doc.d); 
    assert.equal(1, doc.f); 
    db.close(); 
}) 

Этот 'новый' вариант, кажется, ключ:

новый{Boolean, по умолчанию: ложь}

установлено в true, если вы хотите вернуть urn измененный объект, а не оригинал. Игнорируется для удаления.

Надеюсь, что это поможет

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