Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在添加到数组之前检查嵌套数组项是否已存在_Node.js_Mongodb - Fatal编程技术网

Node.js 如何在添加到数组之前检查嵌套数组项是否已存在

Node.js 如何在添加到数组之前检查嵌套数组项是否已存在,node.js,mongodb,Node.js,Mongodb,我正在Mongo中创建一个新的对象id并将其分配给一个嵌套的数组项,这非常有效。我不知道如何对照该对象ID检查它是否已经存在 路线如下: router.post('/events', function(req,res){ var loggedInUser = req.user.username; var objectId = new ObjectID(); User.update( {"username" : loggedInUser},

我正在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
            });
        }
    );
});

要使用不等式运算符检查数组中是否没有值:

        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
                });
            }
        );
这将检查数组中子文档的所有命名属性,并确保该值不存在

所以“查询”部分就是你控制它的地方。如果您的值已经存在
\u id
,则不存在匹配项,因此不会进行更新

否则,如果你不知道 ID ID/COD>值,比如“名称”:

,你会考虑其他独特的东西。
太好了,这正是我需要的。我想我问错问题了,但你的第二个解决方案正是我所需要的。谢谢
        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
                });
            }
        );