Articles of 聚合框架

MongoDB聚合:$存在的任何值

我试图利用MongoDB聚合RESTful api,但陷入了下面的情况。 假设我有Subscriptions模型,看起来像这样: var mongoose = require('mongoose'), Schema = mongoose.Schema; var SubscriptionSchema = new Schema({ // … cancelled: Date }); 如果订阅处于活动状态,则cancelled属性可以是undefined ,也可以是用户取消操作的Date 。 现在,我有一个GET /me/subscriptions ,它聚合了订阅,并有一个可选的查询参数: cancelled=true (只显示取消)或cancelled=false (只显示活动)。 如果没有指定,应该返回任何订阅(激活或取消)。 var express = require('express'), router = express.Router(), Subscription = require('../../models/subscription'); router.get('/me/subscriptions', function(req, res, next) { var cancelled = req.query.cancelled === 'true' ? { $exists: true […]

如何在查询父项时获取聚合的mongoose子文档数组中的值的总和?

我正在尝试在express和mongoose之上构build一些先进的Hello World应用程序。 假设我有下一个Schema: const pollOptionsSchema = new Schema({ name: String, votes: { type: Number, default: 0 } }); const pollSchema = new Schema({ name: String, dateCreated: { type: Date, default: Date.now }, author: { type: Schema.Types.ObjectId }, options: [pollOptionsSchema] }); 而当我只是打电话 Poll.findOne({_id: req.params.id}).exec((err, data) => { if (err) console.log(err); // I receive next data: // […]

有条件地包含聚合stream水线阶段

我有一个函数,根据给定的参数给我一些命令。 但是,参数可以是空的,在这种情况下,我想单独离开$match 。 这是我现在的代码: if(req.query.status && typeof(req.query.status) == 'array'){ var match = { $in: req.query.status }; }else if(req.query.status){ var match = req.query.status; }else{ //when empty find all statuses var match = null; } Order.aggregate( { $match: { 'shop.nameSlug' : req.query.nameSlug, } }, { $unwind: "$status" }, { $match: { "status.status" : match } }, { […]

如何计算mongoDB中唯一数据的数量

我在mongoDB中是非常新的初学者。 我们必须显示输出数据 用户按date的唯一编号。 Android用户和Ios用户的数量。 这是inputJSON数据 input [{ 'name' : 'user1', 'date' : '23/09/2017', 'deviceType' : 'Android' }, { 'name' : 'user2', 'date' : '24/09/2017', 'deviceType' :'ios' }, { 'name' : 'user1', 'date' : '23/09/2017', 'deviceType' :'ios' }, { 'name' : 'user2', 'date' : '23/09/2017', 'deviceType' :'ios' }, { 'name' : 'user1', 'date' : '24/09/2017', 'deviceType' […]

来自外部集合的项目特定字段$查找结果

我正在写聚合,以获得与本地收集外国收集数据。 db.getCollection('orders').aggregate([ { $match: { status: "UNASSIGNED", serviceLocationId: "83177" } }, { $lookup: { from: "servicelocations", localField: "serviceLocationId", foreignField: "serviceLocationId", as: "locations" } }, { $unwind: "$locations" }]) 我越来越: { "_id" : ObjectId("59d32b5c360198e441b67545"), "accountId" : 1.0, "orderId" : "AQ137O1701240", "serviceLocationId" : "83177", "orderDate" : "2017-09-18T18:29:00.000Z", "description" : "AQ137O1701240", "serviceType" : "Delivery", "orderSource" : "Import", "takenBy" […]

Mongodb聚合与客户端处理

我有一个几乎具有以下模式的blogs集合: { title: { name: "My First Blog Post", postDate: "01-28-11" }, content: "Here is my super long post …", comments: [ { text: "This post sucks!" , name: "seanhess" , created: 01-28-14} , { text: "I know! I wish it were longer" , name: "bob" , postDate: 01-28-11} ] } 我主要想运行三个查询: 给我所有的comments 只有 bob […]

按最高计数合计

如何使用聚合框架以最高计数来聚合结果? { "type": "dog", "name": "buddy", "count": 67 }, { "type": "dog", "name": "buddy", "count": 34 }, { "type": "dog", "name": "tucker", "count": 17 }, { "type": "dog", "name": "tucker", "count": 52 }, { "type": "cat", "name": "gizmo", "count": 11 } 我想汇总上面的结果,所以如果dog有相同的name我想得到最高的一个。 所以它看起来像: { "type": "dog", "name": "buddy", "count": 67 }, { "type": "dog", "name": […]

迭代MongoDB聚合查询产生的数组

大家下午好, 我在MongoDB 3.4中使用聚合查询非常困难。 我有一个问题是要求我将聚合查询的结果推送到一个名为categories的空数组中,我已经能够成功地使用这个代码: var categories = []; database.collection("item").aggregate([{ $group : { _id : "$category", num : {$sum : 1} }}, {$sort:{_id:1}}]).toArray(function(err, data){ categories.push(…data); callback(categories); console.log(categories); }) } categories看起来像这样: [ { _id: 'Apparel', num: 6 }, { _id: 'Books', num: 3 }, { _id: 'Electronics', num: 3 }, { _id: 'Kitchen', num: 3 }, { […]

在node.js-mongodb中分组

我想在我的server.js中使用group,但是我得到这个错误: TypeError:Object #(Collection) has no method 'group' 我在网上看,看到这个函数的名字。 这是我写的: var monk = require('monk'); var db = monk('localhost:27017/Messages'); var collection = db.get('col'); collection.group(['a'], {}, {}, {}, function (e, docs) { res.json(docs); }); 谁能告诉我什么是错的? 谢谢!

与geonear的mongoose聚合

我试图用Mongoose geoNear命令实现分页。 它似乎跳过不支持与geoNear,我明白聚合将工作(与分页与性能成本)。 我怎样才能转换为聚合查询跳过一些文件? exports.near = function(req, res) { if(req.query.lat && req.query.lng) { var point = { type: "Point", coordinates : [Number(req.query.lng), Number(req.query.lat)] }; var queryParams = { spherical: true, skip: 0, limit: 10, distanceMultiplier: 6371 // radians to kilometers. (The radius of the Earth is approximately 3,959 miles or 6,371 kilometers.) }; if(req.query.q) { […]