Tag: 聚合框架

使用计算值进行汇总比较

var data_form = { { _id : "123", result:{ run:10 }, result_re:{ run:10 }, result_ch:{ run:10 }, result_qm:{ run:10 } }, { _id : "345", result:{ run:20 }, result_re:{ run:20 }, result_ch:{ run:20 }, result_qm:{ run:20 } }, { _id : "567", result:{ run:30 }, result_re:{ run:30 }, result_ch:{ run:30 }, result_qm:{ run:30 } } […]

mongoDB中有多个$组

我有在mongodb不同的logging。 我写下一个小例子: {_id:"sad547er4w2v5x85b8", name:"Jhon", jobTime:600, floor:2, dept:5, age:25}, {_id:"xcz547wer4xcvcx1g2", name:"Alex", jobTime:841, floor:4, dept:1, age:55}, {_id:"xcnwep2321954ldfsl", name:"Alice", jobTime:100, floor:3, dept:3, age:55}, {_id:"23s3ih94h548jhfk2u", name:"Anne", jobTime:280, floor:2, dept:8, age:22}, {_id:"03dfsk9342hjwq1503", name:"Alexa", jobTime:355, floor:2, dept:6, age:25} 我试图获得这个结果,但我不知道如何分组两次才能得到这个结构。 {[ {age:22, floors:[{floor:2,persons:[{name:"Anne",jobTime:280,dept:8}]}]}, {age:25, floors:[{floor:2,persons:[{name:"Jhon",jobTime:600,dept:5},{name:"Alexa",jobTime:355,dept:6}]}]}, {age:55, floors:[{floor:3,persons:[{name:"Alex",jobTime:841,dept:1}]},{floor:4,persons:[{name:"Alice",jobTime:100,dept:3}]}]} ]}

mongodb按照date最近的特定小时/分钟的date汇总文档

我在我的MongoDB中有文件,这个文件有event字段 – 这个fildtypes是date 。 年,月,日,无所谓,只表示白天的时间。 我希望cron脚本每天都要从mongodb中将文档与event (datetypes)字段聚合到最近10分钟(到脚本调用date)。 如何正确实施?

将数组索引匹配到提供的对象variables

我有这样的外部对象: var obj = { a: 2, b: 0, c: 1 } 此外,我有与引用obj字段“ref”的集合。 obj对象中的值被视为集合中的数组字段的索引。 { ref: "a", array: ["xyz", "abc", "def"] } { ref: "b", array: ["sde", "xda", "era"] } { ref: "c", array: ["wwe", "aea", "fre"] } 我想聚集收集只有一个取决于在obj中指定的索引值的数组。 .aggregate([ { $project: { code: $arrayElemAt: ["$array", { $let: { vars: { obj: obj }, in: […]

如何从条件输出中删除不需要的字段

我有一个投影阶段如下, { 'name': {$ifNull: [ '$invName', {} ]},, 'info.type': {$ifNull: [ '$invType', {} ]}, 'info.qty': {$ifNull: [ '$invQty', {} ]}, 'info.detailed.desc': {$ifNull: [ '$invDesc', {} ]} } 如果字段不存在,则投影为空对象( {} ),因为如果在字段中执行sorting并且该字段不存在,则该文档按sorting顺序排列( sorting文档不存在字段到结束结果 )。 下一个阶段是sorting,并希望不存在的字段sorting顺序最后。 这是按预期工作。 现在,我想删除那些有空对象作为值的字段(如果info.detailed.desc是空的info.detailed不应该在输出中)。 我可以使用像这样的lodash在节点级别lodash此操作( https://stackoverflow.com/a/38278831/6048928 )。 但我试图在MongoDB级别做到这一点。 可能吗? 我试过$redact ,但它是过滤掉整个文档。 是基于值的PRUNE或DESCEND字段的文件是可能的?

向MongoDB高效地添加额外的字段

对于一个API,我从我的MongoDB返回一个对象列表。 为了更加RESTful,我想为每个对象添加一个字段link 。 我的方法是在处理请求时计算它,并在一个简单的循环中添加每个对象的链接: exports.list = function (req, res) { collection.find({}, {fields: {a: 1, b: 1, c: 1}, function (err, docs) { for (var i = 0; i < docs.length; i++) { docs[i].link = 'http://api.example.com/fooobject/' + docs[i]._id; } res.send(docs); }); }; 不过,我觉得这样做可能不是很好。 有没有更好的方法? 例如,直接告诉MongoDB做这样的计算? 还是甚至build议将完整的链接保存在数据库本身?

对mongoDB中的search结果进行分页

我正在尝试在下面的mongoDB中对我的search结果进行分页 { "data": [ { "_id": "538037b869a1ca1c1ffc96e3", "jobs": "america movie" }, { "_id": "538037a169a1ca1c1ffc96e0", "jobs": "superman movie" }, { "_id": "538037a769a1ca1c1ffc96e1", "jobs": "spider man movie" }, { "_id": "538037af69a1ca1c1ffc96e2", "jobs": "iron man movie" }, { "_id": "538037c569a1ca1c1ffc96e4", "jobs": "social network movie" } ], "Total_results": 5, "author": "Solomon David" } 这是由textScore索引和sorting,所以我实施了下面的这些分页 app.get('/search/:q/limit/:lim/skip/:skip',function(req,res){ var l = parseInt(req.params.lim); […]

Mongodb:如何返回查询列表中存在的数组元素

我有一个名为商店的集合。 结构如下: [ { '_id' : id1, 'details' : {name: 'shopA'}, 'products' : [{ _id: 'p1', details: { 'name': 'product1' } },{ _id: 'p2', details: { 'name': 'product2' } }, { _id: 'p4', details: { 'name': 'product4' } } },{ '_id' : id2, 'details' : {name: 'shopB'}, 'products' : [{ _id: 'p1', details: { 'name': […]

MongoDB:如何解决客户端上的DBRef?

我是mongodb的新手,很抱歉,如果这个问题是愚蠢的:我已经拉了一个文件,结构如下: { "_id" : ObjectId("575df70512a1aa0adbc2b496"), "name" : "something", "content" : { "product" : { "$ref" : "products", "$id" : ObjectId("575ded1012a1aa0adbc2b394"), "$db" : "mdb" }, "client" : { "$ref" : "clients", "$id" : ObjectId("575ded1012a1aa0adbc2b567"), "$db" : "mdb" } } 我指的是products和clients收集中的文档。 我读过,有可能在客户端解决这些DBRefs( https://stackoverflow.com/a/4067227/1114975 )。 我该怎么做呢? 我想避免查询这些对象并将它们embedded到文档中。 谢谢

API – 应该在前端还是后端应用程序中进行聚合?

我编写了一个从MongoDB数据库中检索数据的API。 我也有一个使用API​​数据的前端应用程序(如果相关的话,这两个应用程序都是用Koa框架编写的Node JS) 我需要在一个给定的时间内(需要计算的平均值,五分位数等)进行大量数值数据的聚合,这可能是所有数据按月份分组,按年份分组或按personID分组。 我已经阅读了一些例子,人们说API应该被用作数据库层的包装,仅仅提供对原始数据的访问 – 但是对我来说,逻辑将存在于数据库上是有意义的(而不是要求前端应用程序来搅动数据)。 这是一个常见的问题,从您自己的经验 – 获得API来做聚合或前端应用程序更好吗? 示例文档 { "date": ISODate("2016-07-31T07:34:05+01:00Z"), "value": 5, "personID": 123 }, { "date": ISODate("2016-08-01T12:53:05+01:00Z"), "value": 3, "personID": 789 }