說我有文檔的集合,每一個管理教師和學生之間的討論:有條件更新,視場匹配
{
_id,
teacherId,
studentId,
teacherLastMessage,
studentLastMessage
}
有3個參數
我會得到查詢:一個_id
,一個userId
和message
。
我正在尋找一種方式來更新teacherLastMessage
場或根據用戶是一個studentLastMessage
場。
目前,我有這樣的:
return Promise.all([
// if user is teacher, set teacherLastMessage
db.collection('discussions').findOneAndUpdate({
teacherId: userId,
_id
}, {
$set: {
teacherLastMessage: message
}
}, {
returnOriginal: false
}),
// if user is student, set studentLastMessage
db.collection('discussions').findOneAndUpdate({
studentId: userId,
_id
}, {
$set: {
studentLastMessage: message
}
}, {
returnOriginal: false
})
]).then((results) => {
results = results.filter((result) => result.value);
if (!results.length) {
throw new Error('No matching document');
}
return results[0].value;
});
有沒有辦法告訴蒙戈做出有條件更新,基於字段是否匹配?這樣的事情:
db.collection('discussions').findOneAndUpdate({
$or: [{
teacherId: userId
}, {
studentId: userId
}],
_id
}, {
$set: {
// if field matched was studentId, set studentLastMessage
// if field matched was teacherId, set teacherLastMessage
}
});
當然,它一定可以與mongo 3.2?
這是不可能做到這一點使用只有一個查詢。你需要改變你的數據結構。爲教師和學生創建單獨的對象。這樣你就可以使用一個查詢來更新。 – Shrabanee