【发布时间】:2017-01-31 10:03:55
【问题描述】:
我正在尝试使用 node.js 中的 moongose 在 mongodb 中查找子集合,但它会查找所有子记录,我只想查找活动记录。
父集合是用户 子集合 - 包含用户发布的帖子并具有 user_id 作为用户集合的引用的帖子。我试过下面的查询,但没有运气
用户收集示例:
{
"_id" : ObjectId("584016e28880811461000007"),
"fname" : "Test",
"lname" : "user",
"email" : "test@user.com",
},
{
"_id" : ,
"fname" : "Test2",
"lname" : "user2",
"email" : "test2@user.com",
}
收集后样本:
{
"_id" : ObjectId("5863aed8cafb42674600000e"),
"user_id" : ObjectId("584016e28880811461000007"),
"title" : "Post 1",
"is_deleted" : false
},
{
"_id" : ,
"user_id" : ObjectId("584016e28880811461000007"),
"title" : "Post 2",
"is_deleted" : true
}
我试过的查询:
Users.collection.aggregate([
{ $lookup: {from: "Posts", localField: "_id", foreignField: "user_id", as: "Posts"} },
{ $match : { $or : [{"Posts._id" : {$exists : true}, "Posts.is_deleted" : false}] }},
{$project: {fname: "$fname", lname : "$lname", email : "$email", "publishedPosts" : {$size : "$Posts"}}}
])
我从上面的代码得到的结果:
[
{"fname" : "Test", "lname" : "user", "email" : "test@user.com", "publishedPosts" : 2},
{"fname" : "Test2", "lname" : "user2", "email" : "test2@user.com", "publishedPosts" : 0}
]
预期结果:
[
{"fname" : "Test", "lname" : "user", "email" : "test@user.com", "publishedPosts" : 1},
{"fname" : "Test2", "lname" : "user2", "email" : "test2@user.com", "publishedPosts" : 0}
]
它查找所有帖子,is_deleted 是假还是真
请帮我解决一些对我有用的类似查询
【问题讨论】:
-
请提供来自用户和帖子集合的示例文档,以及预期的输出
-
@felix 请检查问题,我为你编辑了它
-
@felix 我非常抱歉,但我错误地输入了错误的预期结果。现在好了
-
我更新了答案,现在应该可以正常工作了