【发布时间】:2023-04-10 21:12:01
【问题描述】:
以下是样本集。
col1:
"_id" : ObjectId("5ec293782bc00b43b463b67c")
"status" : ["running"],
"name" : "name1 ",
"dcode" : "dc001",
"address" : "address1",
"city" : "city1"
col2:
"_id" : ObjectId("5ec296182bc00b43b463b68f"),
"scode" : ObjectId("5ec2933df6079743c0a2a1f8"),
"ycode" : ObjectId("5ec293782bc00b43b463b67c"),
"city" : "city1",
"lockedDate" : ISODate("2020-05-20T00:00:00Z"),
"_id" : ObjectId("5ec296182bc00b43b463688b"),
"scode" : ObjectId("5ec2933df6079743c0a2a1ff"),
"ycode" : ObjectId("5ec293782bc00b43b463b67c"),
"city" : "city1",
"lockedDate" : ISODate("2020-05-20T00:00:00Z"),
"_id" : ObjectId("5ec296182bc00b43b44fc6cb"),
"scode" :null,
"ycode" : ObjectId("5ec293782bc00b43b463b67c"),
"city" : "city1",
"lockedDate" : ISODate("2020-05-20T00:00:00Z"),
问题陈述:
我想根据 scode 为 != null 的 ycode 显示 col1 中的名称和 col2 中的文档数
尝试过:
db.col1.aggregate([
{'$match':{
city:'city1'
}
},
{
$lookup:
{
from: "col2",
let: {
ycode: "$_id",city:'$city'
},
pipeline: [
{
$match: {
scode:{'$ne':null},
lockedDate:ISODate("2020-05-20T00:00:00Z"),
$expr: {
$and: [
{
$eq: [
"$ycode",
"$$ycode"
]
},
{
$eq: [
"$city",
"$$city"
]
}
]
},
},
},
], as: "col2"
}
},
{'$unwind':'$col2'},
{'$count':'ycode'},
{
$project: {
name: 1,
status: 1,
}
},
])
现在这个查询的问题是它要么显示计数,要么显示名称和状态,即如果我以当前格式运行此查询,它会给出{},如果我删除{'$count':'ycode'},那么它会投影值但不会给出计数,如果我删除$project,那么我确实得到计数{ycode:2},但是项目不起作用,但我想在结果中实现两者。任何建议
ORM:猫鼬 v>5,mongodb v 4.0
【问题讨论】:
-
这是因为 :: 无论您在
$count阶段之前有多少文档,但在$count阶段之后,只有一个文档和一个字段{ ycode : someNumber }并且您将失去所有文档及其领域。试试我的查询,你可以只做$size而不是$unwind&$count..
标签: mongodb mongoose aggregation-framework