查询mongodb中的项目字段,直到sum=n
下面是按属性排序的样本采集结果查询mongodb中的项目字段,直到sum=n,mongodb,mongodb-query,Mongodb,Mongodb Query,下面是按属性排序的样本采集结果 { "_id" : ObjectId("5d96f8245e1ffa18e26dd2e2"), "name" : "A", "discount" : 10 }, { "_id" : ObjectId("5d96f8245e1ffa18e26dd2e2"), "name" : "B", "discount" : 15 }, { "_id" : ObjectId("5d96f8245e1ffa18e26dd2e2
{
"_id" : ObjectId("5d96f8245e1ffa18e26dd2e2"),
"name" : "A",
"discount" : 10
},
{
"_id" : ObjectId("5d96f8245e1ffa18e26dd2e2"),
"name" : "B",
"discount" : 15
},
{
"_id" : ObjectId("5d96f8245e1ffa18e26dd2e2"),
"name" : "C",
"discount" : 20
},
{
"_id" : ObjectId("5d96f8245e1ffa18e26dd2e2"),
"name" : "D",
"discount" : 30
} .
希望编写一个查询,将文档投影到总和(折扣)输出:
{
"_id" : ObjectId("5d96f8245e1ffa18e26dd2e2"),
"name" : "A",
"discount" : 10
},
{
"_id" : ObjectId("5d96f8245e1ffa18e26dd2e2"),
"name" : "B",
"discount" : 15
}
查找所有单据,直到总和(折扣)=45
这应该返回前3个文档 一个“名称”可以有多个折扣条目,它们应该相加?一张单据将有一个名称和一个折扣,这实际上不应该是一个数据库查询。这是导致各种RDBMS产品中功能膨胀的原因。您只需迭代游标的项目,并在实现“运行总数”后关闭游标,即可实现所需。简言之,这是一个“客户机代码”问题。@NeilLunn我在检查我们是否可以通过查询来做这件事。。无论如何,我会让pymongo实现同样的目标。所以MongoDB不能。一些非常不明智的人可能会建议使用
{“$group”:{“\u id”:null,“docs”:{“$push”:“$$ROOT”}
作为它的一部分,这实际上是将整个集合作为数组放入单个文档中。虽然这可能适用于琐碎的数据集(如您的问题中)这在现实世界中并不实用。相反,迭代光标,因为这就是它们的用途。如果您的数据实际上足够小,可以让可怕的黑客进行攻击,那么您甚至不需要数据库。