Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据条件从mongo收集中获取一些数据_Java_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

Java 根据条件从mongo收集中获取一些数据

Java 根据条件从mongo收集中获取一些数据,java,mongodb,mongodb-query,aggregation-framework,Java,Mongodb,Mongodb Query,Aggregation Framework,我对mongo db相当陌生。我想从mongo的mnocollection收集中获取一些数据。此mnocollection有三个字段\u id、objId和state 我想返回所有\u id,它的max(state)小于或等于某个值。此数据组由objId创建。例如:where max(state)您需要使用db.collection.find()方法以mogodb样式向其传递查询 下面是find方法的文档 要在select查询中编写查询学习查询选择器,您提到了max(state)>410。状态的

我对mongo db相当陌生。我想从mongo的
mnocollection
收集中获取一些数据。此
mnocollection
有三个字段
\u id
objId
state


我想返回所有
\u id
,它的
max(state)
小于或等于某个值。此数据组由
objId
创建。例如:
where max(state)您需要使用
db.collection.find()
方法以mogodb样式向其传递查询

下面是find方法的文档


要在select查询中编写查询学习查询选择器,您提到了
max(state)>410
。状态的最大值
\u id:121.89.2和11.89.56
不大于
410

您可以使用此查询并根据需要更改最大状态条件

db.collection.aggregate([{
$group:
         {
           _id : "$objId",
            "maxState" : {$max: "$state" },
            "idVal" : {$first : "$_id"}
         }},
          {$match: {  "maxState" : {$lt : 410} }}
]);
在结果上只有_id。我已经添加了这个项目。下面的查询应该准确地给出OP中提到的预期结果

db.collection.aggregate([{
$group:
         {
           _id : "$objId",
            "maxState" : {$max: "$state" },
            "idVal" : {$first : "$_id"}
         }},
          {$match: {  "maxState" : {$lt : 410} }},
          {$project: {  idVal : 1, _id : 0}}
]);
提高性能:-

我们可以过滤(即忽略状态为gte 410的所有文档)第一个管道中的文档,然后分组。因此,用于组聚合的文档数量较少

db.collection.aggregate([
    {$match: {  "state" : {$lt : 410} }},
    {$group:
         {
           _id : "$objId",
            "maxState" : {$max: "$state" },
            "idVal" : {$first : "$_id"}
         }},     
    {$match: {  "maxState" : {$lt : 410} }},     
    {$project: {  idVal : 1, _id : 0}}
]);

请添加您的
mnocollection
和预期输出的示例文档此“db.mnocollection.find({“state”:{$lte:410},{u id:1})”@felix check nw.。我已经添加了示例数据和预期输出。很抱歉,它应该“小于或等于410”更新查询以包含小于410的内容“idVal”:{$first:$u id”}在上面的查询中该怎么办?首先是将“\u id”包含到下一个管道阶段。感谢您的回答…我面临性能问题…它一直在运行。事实上,我的收藏有很多字段…不仅仅是三个字段。我说了三个让问题变得简单。它的dev env和Its拥有200万个文档。
db.collection.aggregate([{
$group:
         {
           _id : "$objId",
            "maxState" : {$max: "$state" },
            "idVal" : {$first : "$_id"}
         }},
          {$match: {  "maxState" : {$lt : 410} }}
]);
db.collection.aggregate([{
$group:
         {
           _id : "$objId",
            "maxState" : {$max: "$state" },
            "idVal" : {$first : "$_id"}
         }},
          {$match: {  "maxState" : {$lt : 410} }},
          {$project: {  idVal : 1, _id : 0}}
]);
db.collection.aggregate([
    {$match: {  "state" : {$lt : 410} }},
    {$group:
         {
           _id : "$objId",
            "maxState" : {$max: "$state" },
            "idVal" : {$first : "$_id"}
         }},     
    {$match: {  "maxState" : {$lt : 410} }},     
    {$project: {  idVal : 1, _id : 0}}
]);