[英]How to check if NESTED array item already exists before adding to array
我正在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
});
}
);
});
您想使用$ne
inequality運算符檢查數組中是否沒有值:
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
});
}
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.