Tag: aggregation framework

不寻常的MongoDB查询

我需要做一个特殊的查询。 我有一个项目列表可用于做一些生产。 有了这个数据,我需要查询列表中的每种types的项目的文件。 几个(略)简单的文档看起来可能会这样。 { "productname": "iron", "requirements": [ { "ammount": 2, "item": "coal" }, { "ammount": 2, "item": "ironore" } ], } { "productname": "coal", "requirements": [ { "ammount": 2, "item": "wood" } ], } { "productname": "copper", "requirements": [ { "ammount": 2, "item": "coal" }, { "ammount": 2, "item": "copperore" } ], } […]

$从多个集合中查找,并嵌套输出

我有一个多个集合,我使用了单独的集合和外键方法,我想join这个集合来构build一个嵌套的集合。 这是我的collections架构: const SurveySchema = new Schema({ _id:{ type: Schema.ObjectId, auto: true }, name: String, enabled: {type: Boolean, Default: true}, created_date:{type: Date, Default: Date.now}, company: {type: Schema.Types.ObjectId, ref: 'Company'},}); const GroupSchema = new Schema({ _id:{ type: Schema.ObjectId, auto: true }, name: String, order: String, created_date:{type: Date, Default: Date.now}, questions: [{type: Schema.Types.ObjectId, ref: 'Question'}], survey: {type: […]

如何在过滤数组时包含空数组

这是我的物品模型。 const itemSchema = new Schema({ name: String, category: String, occupied: [Number], active: { type: Boolean, default: true }, }); 我想过滤“占用”arrays。 所以我使用聚合和放松'占领'领域。 所以我适用匹配查询。 并由_id分组。 但是如果过滤的“占用”数组是空的,则该项目消失。 这是我的代码 Item.aggregate([ { $match: { active: true }}, { $unwind: "$occupied", }, { $match: { $and: [ { occupied: { $gte: 100 }}, { occupied: { $lt: 200 }} ]}}, […]

$ dateToString和$ subString不显示正确的date

db.checkins.aggregate ([{'$match':{"checkinData.time": {"$gt":ISODate("2017-08-31T18:30:00.000Z"), "$lte":ISODate("2017-08-31T20:00:00.000Z")}}}, {"$project":{'dte': {"$dateToString": {format: "%Y-%m-%d", date:"$checkinData.time"} } }} ]) 从数据库返回的数据非常好,这意味着下一个date(2017/09/01)的所有数据返回。 但问题在于“dte”字段的值是显示之前的date(2017-08-31) 但是我必须显示'dte'的值是下一个date(2017-09-01)。 我用$ dateToString和$ subString {"$project":{"dte":{"$substr":["$checkinData.time",0,10]}, 它也同样回报2017-08-31 在mongoDB中是否有任何方法或查询来显示下一个date。

从文档和数组元素聚合得到平均值

我有这些对象的数组: item1 = { name:'item', val:1, list:[ {type:'a',value:1}, {type:'b',value:1}, {type:'c',value:1} ] }; item2 = { name:'item', val:5, list:[ {type:'a',value:3}, {type:'b',value:99}, {type:'c',value:1} ] }; 他们都有相同的数组,相同的types“a”,“b”和“c”,但不同的值。 我怎样才能得到types“a”,“b”和“c”的平均值? 我怎样才能得到所有项目的平均价值? 我期待着 itemAvg = { name:'item', val:3, list:[ {type:'a',value:2}, {type:'b',value:50}, {type:'c',value:1} ] }; 我认为首先按名称分组,然后按列表。 然后展开列表。 然后按types对列表进行分组。 但是这不起作用 model.aggregate([ { $match : <condition> }, { $group : { _id:{name:'$name'}, ValAvg:{$avg:'$val'} List:{$push:'list'} […]

用mongoose计数嵌套的数组

我在一个node.js应用程序中通过mongoose使用mongoDB。 在我的分贝,我有这个一般的格式: 图书: BookSchema = { variousData, //Books contain pages pages: [{type: pageSchema}] } 页数: pageSchema = { variousData, //Pages contain frames frames: [frameSchema] } 框架: frameSchema = { variousData } 我想写一个计数查询,将计算所有书籍中所有页面的总帧数。 所以,如果我有我的数据库中的这个内容: Book1 = { data:data, pages: [ {data:data, frames: [frame1,frame2,frame3] }, {data:data, frames: [frame1,frame2,frame3] }, {data:data, frames: [frame1,frame2,frame3] } ] } 和 Book2 […]

MongoDB – Mongoose:聚合生成,$ match $ group $项目

我是mongoDB世界的新手。 我正在用js和mongoose作为DB在nodeJS上开发一个网站。 我正在学习graphics方向,我用这个模型生成一个数据库: var userSchema = new Schema({ profile:{ sexe: String, // ('male' or 'female') age: String, // ('kid', 'adult', 'old') rank: String, // ('low', 'middle', 'high') }, design:{ luminosity: String, // ('light', 'dark') color: String, // ('blue', 'green', 'pink', 'orange') shape: String, // ('rounded', 'squared') font: String, // ('serif', 'sans serif') } }); 在不同的页面上,我想要显示一些统计信息,例如用户select光照或黑暗的页面亮度。 […]

聚合返回空数组

使用Model.aggregate()的Model.aggregate()返回一个空的数组。 我从本质上复制了这里看到的格式。 var match = {}; var project = {}; project["_id"] = 0; project["products.totalprice"] = 1; project["line"] = "$products.closedate"; ThisCollection.aggregate([ {$match: match}, {$project: project}, {$group: { _id: "$line" }} ], function(err, docs){ console.log(docs); //!! Returning [] }); 我的模式本质上是一个name和_id字段与产品嵌套数组与totalprice , closedate和一些其他领域。 当然有很多条目(大约13万条logging)。 任何人都可以发现这个问题?

mongoose在田间组合find

是否有可能使用mongoosesearch两个字段的连接。 从Mysql这样的东西: select * from CARS where concat(make, model) = "<car name>"; 说,我有车模式如下: var carSchema = new mongoose.Schema({ model: String, make: String, }); var Car = mongoose.model('Car', carSchema); 现在是可能的东西: Car.find( {make + model : <car name>}, function(err, car) { });

mongoose查询内部文件数组

我有这样的模式devise var userNotificationSchema = new Schema({ notification_id: { type: Schema.Types.ObjectId, ref: 'notifications' }, isRead: { type: Boolean } }); var userSchema = new Schema({ notification: [userNotificationSchema] }); 我想获取所有的通知数组列表,这是isRead: 'false' 。 为此我写了 Model.User.find({ _id: userid, 'notification.isRead': false }, function (err, result) { console.log(result); res.send(result); }); 但是这返回结果[] 。