Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 从$unwind mongodb获取有限的数据_Node.js_Mongodb_Mongoose_Mongodb Query_Mongoose Populate - Fatal编程技术网

Node.js 从$unwind mongodb获取有限的数据

Node.js 从$unwind mongodb获取有限的数据,node.js,mongodb,mongoose,mongodb-query,mongoose-populate,Node.js,Mongodb,Mongoose,Mongodb Query,Mongoose Populate,我有一个聊天集,如下所示 { "_id" : ObjectId("5a44e6545818041cde24aac9"), "messages" : [ { "createdAt" : ISODate("2017-12-23T07:46:29.201Z"), "message" : "Hii", "userId" : "000000" }, {

我有一个聊天集,如下所示

{
    "_id" : ObjectId("5a44e6545818041cde24aac9"),
    "messages" : [ 
        {
            "createdAt" : ISODate("2017-12-23T07:46:29.201Z"),
            "message" : "Hii",
            "userId" : "000000"
        }, 
        {
            "createdAt" : ISODate("2017-12-23T12:46:29.201Z"),
            "message" : "Bye gtg ttyl",
            "userId" : "111111"
        }, 
        {
            "createdAt" : ISODate("2017-12-24T07:46:29.201Z"),
            "message" : "Bye Take Care",
            "userId" : "000000"
        }
    ],
    "createdAt" : ISODate("2017-10-23T07:46:29.201Z"),
    "users" : [ 
        {
            "facebookId" : "000000",
            "unread" : 0
        }, 
        {
            "facebookId" : "111111",
            "unread" : 0
        }
    ]
}
当我在nodejs中执行以下查询时

chats.aggregate( [ { $unwind : "$messages" },{ $unwind : "$users" } ])
我得到了一个类似这样的数组,在这个数组中,unwind打开了我的数组

[
    {
        "_id": "5a44e6545818041cde24aac9",
        "messages": {
            "createdAt": "2017-12-23T07:46:29.201Z",
            "message": "Hii",
            "userId": "000000"
        },
        "createdAt": "2017-10-23T07:46:29.201Z",
        "users": {
            "facebookId": "000000",
            "unread": 0
        }
    },
    {
        "_id": "5a44e6545818041cde24aac9",
        "messages": {
            "createdAt": "2017-12-23T07:46:29.201Z",
            "message": "Hii",
            "userId": "000000"
        },
        "createdAt": "2017-10-23T07:46:29.201Z",
        "users": {
            "facebookId": "111111",
            "unread": 0
        },
    }, //And so on.
] 
但是我只能在展开where
messages.userId!==users.facebookId

当我获取数据时,直接从MongoDB获取如下对象

[
    {
        "_id": "5a44e6545818041cde24aac9",
        "messages": {
            "createdAt": "2017-12-23T07:46:29.201Z",
            "message": "Hii",
            "userId": "000000"
        },
        "createdAt": "2017-10-23T07:46:29.201Z",
        "users": {
            "facebookId": "111111",
            "unread": 0
        },
    },{
        "_id": "5a44e6545818041cde24aac9",
        "messages": {
            "createdAt": "2017-12-23T12:46:29.201Z",
            "message": "Bye gtg ttyl",
            "userId": "111111"
        },
        "createdAt": "2017-10-23T07:46:29.201Z",
        "users": {
            "facebookId": "000000",
            "unread": 0
        }
    }, {
        "_id": "5a44e6545818041cde24aac9",
        "messages": {
            "createdAt": "2017-12-24T07:46:29.201Z",
            "message": "Bye Take Care",
            "userId": "000000"
        },
        "createdAt": "2017-10-23T07:46:29.201Z",
        "users": {
            "facebookId": "111111",
            "unread": 0
        }
    }
] 

您可以包括
$match
阶段,以仅获取符合此条件的文档:

db.chats.aggregate( [ { $unwind : "$messages" },{ $unwind : "$users" }, {$match:{ 'messages.userId' :{ $ne: 'users.facebookId'} }])

您可以包括
$match
阶段,以仅获取符合此条件的文档:

db.chats.aggregate( [ { $unwind : "$messages" },{ $unwind : "$users" }, {$match:{ 'messages.userId' :{ $ne: 'users.facebookId'} }])
试试下面一个

db.coll3.aggregate([{
            $unwind: '$users'
        }, {
            $project: {
                messages: 1,
                users: 1,
                'messages': {
                    $filter: {
                        input: '$messages',
                        as: 'item',
                        cond: {
                            $ne: ['$$item.userId', '$users.facebookId']
                        }
                    }
                }
            }
        },{ $unwind : "$messages" }
    ])
这是在蒙哥希尔。我注意到你记录中的零的数量不相等。即使@veeram和@Astro的上述查询给了您正确的结果,请确保您没有与它们混淆,如果您尝试了它们,请尝试下面的一个

db.coll3.aggregate([{
            $unwind: '$users'
        }, {
            $project: {
                messages: 1,
                users: 1,
                'messages': {
                    $filter: {
                        input: '$messages',
                        as: 'item',
                        cond: {
                            $ne: ['$$item.userId', '$users.facebookId']
                        }
                    }
                }
            }
        },{ $unwind : "$messages" }
    ])

这是在蒙哥希尔。我注意到你记录中的零的数量不相等。即使@veeram和@Astro的上述查询给了您正确的结果,请确保您没有与它们混淆,如果您尝试了它们

请尝试
{$match:{'messages.userId':{$ne:'$users.facebookId'}}}])
@veeram它不起作用我能看到您的查询吗?chats.aggregate([{$unwind:$messages},{$unwind:$users},{$match:{'messages.userId':{$ne:'$users.facebookId'}}}}}}}}}.exec(函数(错误,数据){res.send(数据);@VeeramTry
{$match:{'messages.userId':{$ne:'$users.facebookId'}}}}}}
@Veeram它不工作了吗?chats.aggregate([{$unwind:$messages:$messages},{$unwind:$users},{$users},{$match:{$messages.userId'}}}}}{$ne:'$users.facebookId'}}}}].exec(函数(err,data){res.send(data);});@Veeramthis对于这一对看起来很奇怪至少:messages.messages:111111和users.facebookId:111111为什么?你能解释一下吗?找不到任何区别尽管这对看起来很奇怪至少:messages.messages:111111和users.facebookId:111111为什么?你能解释一下吗?但找不到任何区别