【发布时间】:2019-07-02 12:45:14
【问题描述】:
要查看用户集合中的哪些文档具有指向特定用户的链接,我使用以下聚合查询:
db.getCollection("users").aggregate([
{
$match: {
$or: [
{_id: ObjectId("5b63133c45a56952c9430776")},
{_id: ObjectId("5b69caec45a56952c8010bdb")},
{_id: ObjectId("5bb49ece45a5696eb624c4f4")}
]
}
},
{
$unwind: {path: "$network"}
},
{
$project: {_id:1,network:1}
},
{
$match:
{"network.id": "5c958c7745a5691cff06f252"}
}
])
给出以下结果,表明三个用户中只有一个匹配:
/* 1 */
{
"_id" : ObjectId("5b69caec45a56952c8010bdb"),
"network" : {
"id" : "5c958c7745a5691cff06f252",
"status" : "connected",
"updated_at" : ISODate("2019-06-27T00:58:45.501Z")
}
}
但如果我分别查询三个用户,例如第一个:
db.getCollection("users").find({_id:ObjectId("5b63133c45a56952c9430776")}, {network:1});
找到了一个未出现在聚合查询中的网络项目(参见项目 113):
/* 1 */
{
"_id" : ObjectId("5b63133c45a56952c9430776"),
"network" : {
"0" : {
"id" : "5b61b7c845a56960683cc53c",
"status" : "connected",
"updated_at" : ISODate("2019-06-26T03:48:38.293Z")
},
"1" : {
"id" : "5bc7ee7745a56931124e50de",
"status" : "sent"
},
...
"113" : {
"id" : "5c958c7745a5691cff06f252",
"status" : "connected",
"updated_at" : ISODate("2019-06-28T07:19:34.463Z")
},
...
}
}
是我的聚合查询错误还是聚合框架中的错误?
MongoDB 版本 3.6.6
【问题讨论】:
-
真的很奇怪,你确定你的聚合只返回一个值吗?我做了一个 Fiddle (mongoplayground.net/p/5hHOryuS7ZX) 来测试你的查询,它得到了不止一个用户,虽然我没有用更大的网络阵列进行测试
-
阳性。它只返回一个值。感谢您为小提琴所做的努力以及由此带来的确认措施,@MatheusHatje
-
因为你把
$unwind变成了network数组
标签: mongodb aggregation-framework