2015-09-29 56 views
0

查询未示出:的MongoDB - 场骨料

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

当运行该查询仅环境和CPU_oversubcription字段被示出,未示出的存储器领域。

这是输出我得到:

[{"_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 } } 

db.environments.find的精确结果()(仅第一结果)

{ "_id" : ObjectId("560a5139b56a71ea60890201"), "customer" : "CustomerName", "environment" : "1", "memory_oversubcription" : 1, "cpu_oversubscription" : 1 } 
+0

这里你的数据样本是否正确?一切都在'_id'之下,并且你的聚合中没有任何字段(看起来基于问题,然后由我自己回答)带有'_id'前缀,如同在{{$ group“:{”_id“:{”environment “:”$ _id.environment“}}}'。主要指出,这不是前面问题中提出的结构。所以我认为你在这篇文章中犯了一个错误。 –

+0

该查询是正确的,但我没有看到它的重点,因为你最终没有对任何东西进行分组。如果你不使用任何这些操作符:http://docs.mongodb.org/manual/reference/operator/aggregation/group/#accumulator-operator,一个简单的查找可以做我认为的诡计。 –

+0

为什么显示cpu_oversubcription,但memory_oversubscription不? – CMS

回答

0

正如@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字段下的结果出于某种原因,一个$项目会更好:

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 } 
} 

没有道理给我,但也许它为你:-)。