mongodb获取最多一个数字的最大值

mongodb获取最多一个数字的最大值,mongodb,database,Mongodb,Database,假设我有以下文件: { "name":"Matheus", "age: 29" }, { "name":"Nicolas", "age: 28" }, { "name":"Raphael", "age: 26" }, { "name":"Trump", "age: 48" }, { "name":"Elon Musk", "age: 35" } 现在,假设我想要检索具有最大年龄的文档,但在给定年龄之前,如下所示:返回具有最大年龄(36岁之前)的文档,这应该返回 "name":"Elon Mus

假设我有以下文件:

{
"name":"Matheus",
"age: 29"
},
{
"name":"Nicolas",
"age: 28"
},
{
"name":"Raphael",
"age: 26"
},
{
"name":"Trump",
"age: 48"
},
{
"name":"Elon Musk",
"age: 35"
}
现在,假设我想要检索具有最大年龄的文档,但在给定年龄之前,如下所示:返回具有最大年龄(36岁之前)的文档,这应该返回

"name":"Elon Musk",
"age: 35"
}
请注意,less或equal运算符不起作用,因为我不需要最大值,我需要最大值直到某个数字。 我明白了,通过做,我几乎可以完成我想要的

db.collection.find().sort({age:-1}).limit(1) // for MAX

但我不需要全局最大值,只需要给定边界内的最大值。如何完成此操作?

如果您正在查找对某个范围执行操作的查询,那么这将有所帮助

db.collection.find({age:{$lte:36, $gte:20}}).sort({age:-1}).limit(1)
让我们创建一个名为stackoverflow的集合,其中包含以下记录

db.stackoverflow.find();
{ "_id" : ObjectId("5792c958caada3861f12e724"), "name" : "Matheus", "age" : 29 }
{ "_id" : ObjectId("5792c958caada3861f12e725"), "name" : "Nicolas", "age" : 28 }
{ "_id" : ObjectId("5792c958caada3861f12e726"), "name" : "Raphael", "age" : 26 }
{ "_id" : ObjectId("5792c958caada3861f12e727"), "name" : "Trump", "age" : 48 }
{ "_id" : ObjectId("5792c95acaada3861f12e728"), "name" : "Elon Musk", "age" : 35 }
[-a,36]中集合的最大值,其中a是任何正实数

现在假设a=28,那么检索年龄大于28岁小于36岁的记录的查询如下所示

db.stackoverflow.find({age:{$gt: 28, $lt:36}});
执行此查询将显示以下结果

{ "_id" : ObjectId("5792c958caada3861f12e724"), "name" : "Matheus", "age" : 29 }
{ "_id" : ObjectId("5792c95acaada3861f12e728"), "name" : "Elon Musk", "age" : 35 }

如果您正在查找对某个范围执行操作的查询,那么这将有所帮助

让我们创建一个名为stackoverflow的集合,其中包含以下记录

db.stackoverflow.find();
{ "_id" : ObjectId("5792c958caada3861f12e724"), "name" : "Matheus", "age" : 29 }
{ "_id" : ObjectId("5792c958caada3861f12e725"), "name" : "Nicolas", "age" : 28 }
{ "_id" : ObjectId("5792c958caada3861f12e726"), "name" : "Raphael", "age" : 26 }
{ "_id" : ObjectId("5792c958caada3861f12e727"), "name" : "Trump", "age" : 48 }
{ "_id" : ObjectId("5792c95acaada3861f12e728"), "name" : "Elon Musk", "age" : 35 }
[-a,36]中集合的最大值,其中a是任何正实数

现在假设a=28,那么检索年龄大于28岁小于36岁的记录的查询如下所示

db.stackoverflow.find({age:{$gt: 28, $lt:36}});
执行此查询将显示以下结果

{ "_id" : ObjectId("5792c958caada3861f12e724"), "name" : "Matheus", "age" : 29 }
{ "_id" : ObjectId("5792c95acaada3861f12e728"), "name" : "Elon Musk", "age" : 35 }

只需在find上传递过滤条件,它将检索局部最大值。
db.collection.find({age:{$lt:36}}).sort({age:-1}).limit(1)

只需通过find上的筛选条件,它将检索本地最大值。
db.collection.find({age:{$lt:36}}).sort({age:-1}).limit(1)

您是否正在查找范围内的某些数据,例如年龄在30到30岁之间36@ClementAmarnath从[-a,36]开始的集合的最大值,其中a是任何正实数,如果您要查找某个范围内的数据,例如年龄在30到30岁之间36@ClementAmarnath从[-a,36]开始的集合的最大值其中a是任何正实数在这个查询中,我们的上限是36,但我们没有下限更新查询,需要同时应用$lte和$GTE。它与我的答案完全相同,只是我没有对记录添加排序和限制。在这个查询中,我们的上限是36,但是我们没有更新查询的下限,需要同时应用$lte和$GTE。它与我的答案完全相同,只是我没有在记录上添加排序和限制。