Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
MongoDB-未在聚合中显示的字段_Mongodb - Fatal编程技术网

MongoDB-未在聚合中显示的字段

MongoDB-未在聚合中显示的字段,mongodb,Mongodb,查询: db.environments.aggregate( [{$match:{customer:"CustomerName"}}, {$group:{_id:{environment: "$environment", cpu_oversubscription:"$cpu_oversubscription", memory_oversubscription:"$memory_oversubscription"}}} ]) 当我运行查询时,只显示环境和CPU_Oversubscription字

查询:

db.environments.aggregate(
[{$match:{customer:"CustomerName"}},
{$group:{_id:{environment: "$environment",
cpu_oversubscription:"$cpu_oversubscription",
memory_oversubscription:"$memory_oversubscription"}}} ])
当我运行查询时,只显示环境和CPU_Oversubscription字段,而不显示memory字段

这是我得到的输出:

[{"_id":{"environment":"V&B","cpu_oversubscription":1}}
当我运行
db.environments.find()
时,我会看到所有字段

[{"_id":{"environment":"V&B","cpu_oversubscription":1,"memory_oversubscription":1,"customer":"CustomerName"}}
我的问题出了什么问题

编辑:精确查询

Environment.aggregate([{$match:{customer:req.query.customer}},{$group:{_id:{environment: "$environment",cpu_oversubscription:"$cpu_oversubscription",memory_oversubscription:"$memory_oversubscription",}}} ])
{ "_id" : { "environment" : "1", "cpu_oversubscription" : 1 } }
{ "_id" : { "environment" : "2", "cpu_oversubscription" : 4 } }
{ "_id" : { "environment" : "3", "cpu_oversubscription" : 4 } }
{ "_id" : { "environment" : "4", "cpu_oversubscription" : 4 } }
{ "_id" : { "environment" : "5", "cpu_oversubscription" : 4 } }
{ "_id" : { "environment" : "6", "cpu_oversubscription" : 1 } }
{ "_id" : { "environment" : "7", "cpu_oversubscription" : 1 } }
{ "_id" : { "environment" : "8", "cpu_oversubscription" : 1 } }
{ "_id" : { "environment" : "9", "cpu_oversubscription" : 4 } }
{ "_id" : { "environment" : "10", "cpu_oversubscription" : 4 } }
查询的准确结果

Environment.aggregate([{$match:{customer:req.query.customer}},{$group:{_id:{environment: "$environment",cpu_oversubscription:"$cpu_oversubscription",memory_oversubscription:"$memory_oversubscription",}}} ])
{ "_id" : { "environment" : "1", "cpu_oversubscription" : 1 } }
{ "_id" : { "environment" : "2", "cpu_oversubscription" : 4 } }
{ "_id" : { "environment" : "3", "cpu_oversubscription" : 4 } }
{ "_id" : { "environment" : "4", "cpu_oversubscription" : 4 } }
{ "_id" : { "environment" : "5", "cpu_oversubscription" : 4 } }
{ "_id" : { "environment" : "6", "cpu_oversubscription" : 1 } }
{ "_id" : { "environment" : "7", "cpu_oversubscription" : 1 } }
{ "_id" : { "environment" : "8", "cpu_oversubscription" : 1 } }
{ "_id" : { "environment" : "9", "cpu_oversubscription" : 4 } }
{ "_id" : { "environment" : "10", "cpu_oversubscription" : 4 } }
db.environments.find()的精确结果(仅第一个结果)


正如@Yogesh所说,您的数据中的字段有一个输入错误。这就解决了你的问题

但是,此查询不需要聚合框架: 带有投影的查找将更加高效:

db.environments.find({ "customer" : "CustomerName" }, 
                     { _id : 0, "environment" : 1,
                       "memory_oversubscription" : 1, 
                       "cpu_oversubscription" : 1
                     })
结果将是:

{ 
  "environment" : "1", 
  "memory_oversubscription" : 1,
  "cpu_oversubscription" : 1 
}
如果出于某些原因,您确实希望在_id字段下获得结果,那么$project会更好:

db.environments.aggregate([
  {$match:{"customer" : "CustomerName"}},
  {$project: 
    {_id : 
      {"environment" : "$environment",
       "memory_oversubscription" : "$memory_oversubscription", 
       "cpu_oversubscription" : "$cpu_oversubscription"}
    }
  }
]);
结果:

{ "_id" : { "environment" : "1", 
            "memory_oversubscription" : 1, 
            "cpu_oversubscription" : 1 } 
}

这对我来说没有意义,但也许对你有意义:-)。

这里的数据样本正确吗?所有内容都在
\u id
下,聚合中的任何字段(看起来是基于我提出的问题,实际上是我自己回答的问题)都没有前缀
\u id
,如
{“$group”:{“\u id”:{“environment”:“$\u id.environment”}
。主要注意到这不是前面问题中提出的结构。因此,我认为你在帖子中犯了一个错误。这个问题是正确的,但我不认为这有什么意义,因为你最终没有对任何东西进行分组。如果你不使用这些运算符中的任何一个:,我想一个简单的查找就可以了。为什么cpu超订阅会显示,而内存超订阅不会显示?你能添加一个示例文档并告诉我们你的要求吗?@CMS看起来你把
内存超订阅
错放到
内存超订阅