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.
]
但是我只能在展开wheremessages.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为什么?你能解释一下吗?但找不到任何区别