Ниже мой код
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var Cat = mongoose.model('Cat', {
name: String,
age: {type: Number, default: 20},
create: {type: Date, default: Date.now}
});
Cat.findOneAndUpdate({age: 17}, {$set:{name:"Naomi"}},function(err, doc){
if(err){
console.log("Something wrong when updating data!");
}
console.log(doc);
});
У меня уже есть какая-то запись в моей базе данных Монго, и я хотел бы запустить этот код, чтобы обновить имя, для которого 17 лет, а затем распечатать результат в конце кода.
Однако, почему я все еще получаю тот же результат из консоли (не измененное имя), но когда я иду в командную строку mongo db и набираю " db.cats.find();
" Результат пришел с измененным именем.
Затем я снова запускаю этот код, и результат изменяется.
Мой вопрос: если данные были изменены, то почему я все еще получил оригинальные данные в первый раз, когда console.log их.
{ returnOriginal: false }
Для тех, кто использует драйвер Node.js вместо Mongoose, вы захотите использовать
{returnOriginal:false}
вместо{new:true}
.источник
Таким образом, «findOneAndUpdate» требует опции для возврата оригинального документа. И, вариант:
Оболочка MongoDB
{returnNewDocument: true}
Ссылка: https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndUpdate/
Мангуста
{new: true}
Ссылка: http://mongoosejs.com/docs/api.html#query_Query-findOneAndUpdate
Node.js API драйвера MongoDB:
{returnOriginal: false}
Ссылка: http://mongodb.github.io/node-mongodb-native/3.0/api/Collection.html#findOneAndUpdate
источник
'returnDocument' => FindOneAndUpdate::RETURN_DOCUMENT_AFTER
По умолчанию findOneAndUpdate возвращает исходный документ. Если вы хотите, чтобы он возвратил измененный документ, передайте объект параметров
{ new: true }
в функцию:источник
_id
ноль?Для тех, кто наткнулся на это, используя стиль ES6 / ES7 с собственными обещаниями, вот шаблон, который вы можете принять ...
источник
Это обновленный код для
findOneAndUpdate
. Оно работает.источник
Мангуста здесь. Вам нужно установить
new
опциюtrue
(или, что то же самое,returnOriginal
чтобыfalse
)См. Документацию Mongoose
findOneAndUpdate()
и это руководство по обновлению документов в Mongoose .источник
Если вы хотите вернуть измененный документ, вам нужно установить опцию
{new:true}
API-ссылку, которую вы можете использоватьCat.findOneAndUpdate(conditions, update, options, callback) // executes
Взятые официальным API Mongoose http://mongoosejs.com/docs/api.html#findoneandupdate_findOneAndUpdate, вы можете использовать следующие параметры
Еще одна реализация, которая не отражена на официальной странице API и которую я предпочитаю использовать, - это
Promise
базовая реализация, которая позволяет вам иметь место,.catch
где вы можете справиться со всеми вашими различными ошибками.источник
Ниже показан запрос для мангуста
findOneAndUpdate
. Здесьnew: true
используется для получения обновленного документа иfields
для получения определенных полей.например.
findOneAndUpdate(conditions, update, options, callback)
источник
Я знаю, я уже опоздал, но позвольте мне добавить мой простой и рабочий ответ здесь
источник