对于“用户”集合中的以下文档:
{
_id: ObjectId(1234),
name: "Joe Bloggs"
events: [
{
date: 1378335600, //timestamp representing the start of day
venues: [<venue_id>, <venue_id>, ...]
},
{
date: 1378249200 //the previous day
venues: [<venue_id>]
}
]
}
问题:我想在给定日期将一个新的venue_id推送到场馆阵列。
但是,如果一个事件对象与相应的日期不存在,新的事件对象将被推送到具有新日期的events数组,并且场地被推送到场馆阵列。
尝试使用日期更新,如果失败,那么我们知道需要创建新的事件对象。像这样:
Users.findOneAndUpdate({_id: 1234, "events.date": <timestap>},
{ $push: {"events.$.venues" : <venue_id>} },
function(err, result) {
if(err || !result) {
//Issue another mongoose update to push the new event with
//the new date and add the venue array with the <venue_id>
} else {
//the update was successful as there already was a event object
//with the corresponding date.
}
});
这个问题是否有更清洁的解决方案?
答案 0 :(得分:1)
您可以执行upsert以获得所需的结果
Users.update({ name: "Joe Bloggs", "events.date" : 1378335600 },{ $push: {"events.venues": 1}},{ upsert: true }, function(err{...})