- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个具有以下结构的文档:
{
'_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].sum
或0
。
因此您可以只使用自己的管道并在末尾添加这个阶段,这实际上是相同的复杂性。
db.collection.aggregate([
...
your entire pipeline
...
{
$group: {
_id: null,
sum: {$sum: 1}
}
}
])
如果您有任何其他具体原因不想使用聚合框架,请告诉我,也许有解决方法。
关于mongodb - 如何使 mongodb 使用 countDocuments() 和 $addFields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67252012/
我正在使用 MongoDB,更具体地说是 Mongoose。我最近已经摆脱了更新 mongo 和 mongoose 的一些弃用警告。 我的一些查询可能如下所示: const count = await
我开始学习 mongoose/MongoDB 聚合函数,但遇到了一些基本困难。例如,我正在尝试执行以下操作: var myModels= require('./models/myModel'); va
我开始学习 mongoose/MongoDB 聚合函数,但遇到了一些基本困难。例如,我正在尝试执行以下操作: var myModels= require('./models/myModel'); va
我有一个具有以下结构的文档: { '_id': '', 'a': '', 'b': '', 'c': [ { '_id': ''
我对 Javascript 还很陌生,我不明白为什么我无法保存下面这段代码的结果。我正在使用 MongoDB,我想存储集群中的文档数量,以便我可以跟踪集群中有多少文档,但是,当我尝试在第三行记录输出时
因此,我正在为 go go.mongodb.org/mongo-driver 使用官方的 mongo 驱动程序,并且在容器中运行 mongodb v4。所有操作都运行良好,但当我尝试向 CountDo
我是一名优秀的程序员,十分优秀!