簡體   English   中英

如何在添加到數組之前檢查NESTED數組項是否已經存在

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM