Questions tagged «aggregation-framework»

MongoDB聚合框架提供了一种在MongoDB 2.2+中重塑和聚合数据的方法。

14
仅检索MongoDB集合中对象数组中的查询元素
假设您的收藏夹中包含以下文档: { "_id":ObjectId("562e7c594c12942f08fe4192"), "shapes":[ { "shape":"square", "color":"blue" }, { "shape":"circle", "color":"red" } ] }, { "_id":ObjectId("562e7c594c12942f08fe4193"), "shapes":[ { "shape":"square", "color":"black" }, { "shape":"circle", "color":"green" } ] } 进行查询: db.test.find({"shapes.color": "red"}, {"shapes.color": 1}) 要么 db.test.find({shapes: {"$elemMatch": {color: "red"}}}, {"shapes.color": 1}) 返回匹配的文档(文档1),但始终包含以下所有数组项shapes: { "shapes": [ {"shape": "square", "color": "blue"}, {"shape": "circle", "color": …




7
MongoDB SELECT COUNT GROUP BY
我正在与MongoDB一起玩,试图弄清楚如何做一个简单的 SELECT province, COUNT(*) FROM contest GROUP BY province 但是我似乎无法使用聚合函数弄清楚。我可以使用一些很奇怪的组语法来做到这一点 db.user.group({ "key": { "province": true }, "initial": { "count": 0 }, "reduce": function(obj, prev) { if (true != null) if (true instanceof Array) prev.count += true.length; else prev.count++; } }); 但是使用聚合函数是否有更简单/更快的方法?

6
包括所有现有字段并向文档添加新字段
我想定义一个$ project聚合阶段,在其中可以指示它添加一个新字段并包括所有现有字段,而不必列出所有现有字段。 我的文档如下所示,其中包含许多字段: { obj: { obj_field1: "hi", obj_field2: "hi2" }, field1: "a", field2: "b", ... field26: "z" } 我想进行这样的聚合操作: [ { $project: { custom_field: "$obj.obj_field1", //the next part is that I don't want to do field1: 1, field2: 1, ... field26: 1 } }, ... //group, match, and whatever... …

3
Mongodb解释聚合框架
MongoDB中的聚合框架有解释功能吗?我在文档中看不到它。 如果没有其他检查方法,则查询如何在聚合框架内执行? 我知道找到你就做 db.collection.find().explain() 但是使用聚合框架,我得到一个错误 db.collection.aggregate( { $project : { "Tags._id" : 1 }}, { $unwind : "$Tags" }, { $match: {$or: [{"Tags._id":"tag1"},{"Tags._id":"tag2"}]}}, { $group: { _id : { id: "$_id"}, "count": { $sum:1 } } }, { $sort: {"count":-1}} ).explain()


3
mongodb组值按多个字段
例如,我有以下文件: { "addr": "address1", "book": "book1" }, { "addr": "address2", "book": "book1" }, { "addr": "address1", "book": "book5" }, { "addr": "address3", "book": "book9" }, { "addr": "address2", "book": "book5" }, { "addr": "address2", "book": "book1" }, { "addr": "address1", "book": "book1" }, { "addr": "address15", "book": "book1" }, { …


6
MongoDB中的$ unwind运算符是什么?
这是我在MongoDB的第一天,所以请和我一起轻松:) 我听不懂$unwind操作员,也许是因为英语不是我的母语。 db.article.aggregate( { $project : { author : 1 , title : 1 , tags : 1 }}, { $unwind : "$tags" } ); 我想我可以理解项目操作员(就像SELECT,不是吗?)。但是,然后$unwind(citing)为每个源文档中未展开数组的每个成员返回一个文档。 这像JOIN吗?如果是,如何的结果$project(有_id,author,title和tags字段)可以用比较tags阵列? 注意:我从MongoDB网站获取了示例,我不知道tags数组的结构。我认为这是一个简单的标签名称数组。

6
在数组中的ObjectId上的$ lookup
在由ObjectId数组而不是单个ObjectId组成的字段上执行$ lookup的语法是什么? 订单文档示例: { _id: ObjectId("..."), products: [ ObjectId("..<Car ObjectId>.."), ObjectId("..<Bike ObjectId>..") ] } 不起作用的查询: db.orders.aggregate([ { $lookup: { from: "products", localField: "products", foreignField: "_id", as: "productObjects" } } ]) 所需结果 { _id: ObjectId("..."), products: [ ObjectId("..<Car ObjectId>.."), ObjectId("..<Bike ObjectId>..") ], productObjects: [ {<Car Object>}, {<Bike Object>} ], }



2
仅返回嵌套数组中匹配的子文档元素
主要集合是零售商,其中包含商店数组。每个商店都包含一系列优惠(您可以在此商店中购买)。此提供的数组具有大小的数组。(请参见下面的示例) 现在,我尝试查找所有可用尺寸的报价L。 { "_id" : ObjectId("56f277b1279871c20b8b4567"), "stores" : [ { "_id" : ObjectId("56f277b5279871c20b8b4783"), "offers" : [ { "_id" : ObjectId("56f277b1279871c20b8b4567"), "size": [ "XS", "S", "M" ] }, { "_id" : ObjectId("56f277b1279871c20b8b4567"), "size": [ "S", "L", "XL" ] } ] } } 我已经尝试过以下查询: db.getCollection('retailers').find({'stores.offers.size': 'L'}) 我期望这样的输出: { "_id" : ObjectId("56f277b1279871c20b8b4567"), "stores" …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.