【发布时间】:2018-06-10 15:29:05
【问题描述】:
我有一个聊天集合,下面给出了
{
"_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.
]
但是我只能在messages.userId !== users.facebookIdmessages.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:{ 'messages.userId' :{ $ne: '$users.facebookId'} }]) -
@Veeram 它不工作
-
我可以查看您的查询吗?
-
chats.aggregate( [ { $unwind : "$messages" },{ $unwind : "$users" },{$match:{ 'messages.userId' :{ $ne: '$ users.facebookId'}}}]).exec(function(err, data) { res.send(data); }); @Veeram
标签: node.js mongodb mongoose mongodb-query mongoose-populate