gpt4 book ai didi

mongodb - 如何使 mongodb 使用 countDocuments() 和 $addFields

转载 作者:行者123 更新时间:2023-12-05 02:42:51 25 4
gpt4 key购买 nike

我有一个具有以下结构的文档:

{
'_id': '',
'a': '',
'b': '',
'c': [
{
'_id': '',
'd': '',
'f': [
{
'orderDate': 12345,
'orderProfit': 12,
},
{
'orderDate': 67891,
'orderProfit': 12341,
},
{
'orderDate': 23456,
'orderProfit': 474,
},
],
},
{
'_id': '',
'd': '',
'f': [
{
'orderDate': 14232,
'orderProfit': 12222,
},
{
'orderDate': 643532,
'orderProfit': 4343,
},
{
'orderDate': 33423,
'orderProfit': 5555,
},
],
},
],
}

orderDate 是一个 int64,表示下订单的日期

orderProfit 是一个 int64,表示订单的利润

我需要返回具有最大“orderDate”的文档并检查“orderProfit”是否是我正在寻找的文档。为此,我使用了这样的查询(在聚合查询中):

[
{
'$addFields': {
'orders': {
'$map': {
'input': '$c',
'as': 'c',
'in': {
'profit': {
'$filter': {
'input': '$$c.f',
'cond': {
'$eq': [
{
'$max': '$$c.f.orderDate',
},
'$$this.orderDate',
],
},
},
},
},
},
},
},
},
{
'$match': {
'$or': [
{ 'orders.profit.orderProfit': 500 },
],
},
},
];

它工作正常。

当尝试将此查询添加到 countDocuments() 查询以获取文档总数时,问题就出现了。

需要使用 countDocuments()

我似乎无法让它工作......

$addFields 作为未知顶级运算符抛出。如果我删除 $addFields 那么我就无法将查找最大日期的查询添加到 countDocuments() 中。如果我完全删除它 $match 是一个未知的运算符。

db.getCollection('orders').countDocuments(
{
"orders.profit.orderProfit" : {"Query that was shown previously"}

})

最佳答案

你不能。

countDocuments收到查找查询,您不能将整个管道附加到它。

但是 countDocuments 只是一个包装器。

Returns the count of documents that match the query for a collection or view. The method wraps the $group aggregation stage with a $sum expression to perform the count and is available for use in Transactions.

基本上这个方法只是执行以下聚合:

db.collection.aggregate([
{
$match: yourQuery
},
{
$group: {
_id: null,
sum: {$sum: 1}
}
}
])

然后根据结果返回results[0].sum0

因此您可以只使用自己的管道并在末尾添加这个阶段,这实际上是相同的复杂性。

db.collection.aggregate([
...
your entire pipeline
...
{
$group: {
_id: null,
sum: {$sum: 1}
}
}
])

如果您有任何其他具体原因不想使用聚合框架,请告诉我,也许有解决方法。

关于mongodb - 如何使 mongodb 使用 countDocuments() 和 $addFields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67252012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com