我有 2 个疑问:
aggregate( [
{
$match: {"user_id": 5918725, "shop_id": 1775207, "$text": {"$search" : "API"}}
},
{
$group: {
_id: "_id",
count: {
$sum: {
$cond: [ { $eq: [ "$deleted_at", null ] }, 1, 0 ]
}
}
}
}
]);
和
aggregate( [
{
$match: {"user_id": 5918725, "shop_id": 1775207, "$text": {"$search" : "APIU"}}
},
{
$group: {
_id: "_id",
count: {
$sum: {
$cond: [ { $eq: [ "$deleted_at", null ] }, 1, 0 ]
}
}
}
}
]);
它们是相同的,唯一的区别是搜索关键字,但它们的行为不同, 如果是第一个查询,结果是:
{
"_id" : null,
"count" : 0.0
}
这是预期的结果,但对于第二个结果,结果是
Fetched 0 record(s)
(这就是我的 GUI 显示的结果)。因此,出于某种原因,在第二个查询的情况下,它只是忽略组/总和并尝试获取实际记录。怎么解决啊,先谢谢了!
查询
count : 0
aggregate(
[{"$match":{"$expr":{"$lt":["$a", 5]}}},
{"$group":{"_id":null, "count":{"$sum":1}}},
{"$unionWith":{"coll":"2"}},
{"$group":{"_id":null, "count":{"$sum":"$count"}}}])
我是这样解决的。我知道这不是理想的聚合,但我找不到更好的方法来始终具有相同的返回结构......
aggregate([
{
$facet: { count: [{ "$count": "aux" }] }
},
{
$addFields: {
count: {
$cond: {
if: { $eq: [{ $size: "$count" }, 0] },
then: 0,
else: { $getField: { field: "aux", input: { $first: "$count" } } }
}
}
}
}
]);
通过这种方法,您还可以在构面中进行 2 个查询,以在单个查询中获取两个结果