以下是数据的样子:
{
"_id" : {
"item" : "1",
"state" : "something"
},
"things" : {
"ordered" : 2,
"cost" : 123
}
}
我尝试查询项目1的所有文档,该项目有很多状态。我知道我可以使用db.orders.find({_id:{item:"1", state: "something"}})
获得该记录。但我希望得到所有州,我尝试db.orders.find({_id:{item:"1", state: {$exists: true}}})
但这似乎不起作用。我做错了什么?
答案 0 :(得分:0)
如果您想获得可以使用的所有不同状态的列表。
db.orders.distinct("_id.state");
如果您想获取集合中所有州的列表
db.orders.find({}, {"_id.state": 1});
我真的想要获得给定的所有状态的things.cost 项目
db.orders.aggregate([
{ $group : {
_id : { item : "$_id.item" , state : "$_id.state"},
cost: { $push : "$things.cost" }
}
}
]);
如果您希望使用$sum
而不是$push
我如何获得某些项目?
db.orders.aggregate([
{ $match : { "_id.item" : "YOUR_ID" }},
{ $group : {
_id : { item : "$_id.item" , state : "$_id.state"},
cost: { $push : "$things.cost" }
}
}
]);