2015-02-22 3 views
1

Мои userSchema является:Как использовать findAndModify()? нажать массив?

module.exports = mongoose.model('users', { 
    userName: String, 
    messages: Array 
}); 

сообщения будут:

messages: [{msg: "foo", time: new Date()},{msg: "Bar", time: new Date()}] 

Я хочу, чтобы иметь возможность создать новую запись, если нет совпадения Превед, или если он будет найден, Array.push msg и time в БД.

userSchema.findAndModify({ 
    query:{userName: "Test"}, 
    update:{$push: {messages: {msg: "foo", time: new Date()}}}, 
}); 

Я предполагаю, что это правильно, как бы я добавить нового пользователя, если нет найдено userName?

ответ

2

Предполагая, что ваш запрос выше верно,

Ваш выше запрос должен иметь upsert:true

Как

userSchema.findAndModify({ query:{userName: "Test"}, update:{$push: {messages: {msg: "foo", time: new Date()}}}, new: true,
upsert : true });

Здесь new указывает возвращение обновленный или вставленный объект. upsert указывает на вставку новой записи или обновление записи в зависимости от критериев существования записи.

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

В противном случае, если вы хотите вставить другие атрибуты пользователя, , вы должны использовать команду update: { $set:.

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

Спасибо

+0

Как это сделать с помощью мангуста? «findOneAndUpdate» – ECMAScript

+0

mongoose дают два варианта: 'findOneAndUpdate'' и' 'findByIdAndUpdate''. Они внутренне называют 'findAndModify''. В вашем случае это будет '' findOneAndUpdate'' –

+0

Спасибо, у меня буквально было 100 строк кода, чтобы это сделать, прежде чем я узнал о findAndModify. Теперь мой код SOO чист. – ECMAScript

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