我正在为Mongo中的嵌套数组项创建并分配一个新的对象id,这非常有用。我无法弄清楚如何检查该对象ID以验证它尚不存在。
这是路线:
router.post('/events', function(req,res){
var loggedInUser = req.user.username;
var objectId = new ObjectID();
User.update(
{"username" : loggedInUser},
{
$push:{
primaryEvents:{
_id: objectId,
name: req.body.name,
date: req.body.date,
description: req.body.description
}
}
},
{upsert:true},
function(err){
console.log('made it to the calback');
if(err)
res.send(err);
res.render('index', {
user: req.user,
primaryEvents: req.user.primaryEvents
});
}
);
});
答案 0 :(得分:0)
您想要使用$ne
不等运算符检查数组中没有值:
User.update(
{
"username" : loggedInUser,
"primaryEvents._id": { "$ne": objectid }
},
{
$push:{
primaryEvents:{
_id: objectId,
name: req.body.name,
date: req.body.date,
description: req.body.description
}
}
},
{upsert:true},
function(err){
console.log('made it to the calback');
if(err)
res.send(err);
res.render('index', {
user: req.user,
primaryEvents: req.user.primaryEvents
});
}
);
这将检查数组中子文档的所有命名属性,并确保该值不存在。
因此“查询”部分是您控制它的地方。如果您的值已经有_id
,那么就没有匹配,因此没有更新。
否则,如果您不知道_id
值,请选择您认为唯一的其他内容,例如“name”:
User.update(
{
"username" : loggedInUser,
"primaryEvents.name": { "$ne": req.body.name }
},
{
$push:{
primaryEvents:{
_id: objectId,
name: req.body.name,
date: req.body.date,
description: req.body.description
}
}
},
{upsert:true},
function(err){
console.log('made it to the calback');
if(err)
res.send(err);
res.render('index', {
user: req.user,
primaryEvents: req.user.primaryEvents
});
}
);