[摘要:比来正在用Pomelo框架开辟的时间,遇到一个如许的需供,对mongodb中的某一个调集举行group分组盘算,本来认为很简略的功效,分分钟能够弄定,出念到碰了一鼻子灰,网上搜刮到的种种资]
最近在用Pomelo框架开发的时候,碰到一个这样的需求,对mongodb中的某一个集合进行group分组计算,原本以为很简单的功能,分分钟可以搞定,没想到碰了一鼻子灰,网上搜索到的各种资料要么是错误的,要么就是老的无法适应新版本mongoose和mongodb,最后没办法只能自己去看mongoose官方文档和mongodb手册才解决了问题,写此博文记录下来,方便自己以后查阅和同样碰到问题的同学搜索。
aggregate.append({ $project: { field: 1 }}, { $limit: 2 });// or pass an arrayvar pipeline = [{ $match: { daw: 'Logic Audio X' }} ];aggregate.append(pipeline);
aggregate.group({ _id: "$department" });
aggregate.limit(10);
aggregate.match({ department: { $in: [ "sales", "engineering" } } });
aggregate.near({near: [40.724, -73.997],distanceField: "dist.calculated", // requiredmaxDistance: 0.008,query: { type: "public" },includeLocs: "dist.location",uniqueDocs: true,num: 5});
{ $project: { <specifications> } }
{"_id" : 1,title: "abc123",isbn: "0001122223334",author: { last: "zzz", first: "aaa" },copies: 5}
{$project : {title : 1 ,author : 1}}
{ "_id" : 1, "title" : "abc123", "author" : { "last" : "zzz", "first" : "aaa" } }
{"_id" : 1,title: "abc123",isbn: "0001122223334",author: { last: "zzz", first: "aaa" },copies: 5}
db.books.aggregate([{$project: {title: 1,isbn: {prefix: { $substr: [ "$isbn", 0, 3 ] },group: { $substr: [ "$isbn", 3, 2 ] },publisher: { $substr: [ "$isbn", 5, 4 ] },title: { $substr: [ "$isbn", 9, 3 ] },checkDigit: { $substr: [ "$isbn", 12, 1] }},lastName: "$author.last",copiesSold: "$copies"}}])
{"_id" : 1,"title" : "abc123","isbn" : {"prefix" : "000","group" : "11","publisher" : "2222","title" : "333","checkDigit" : "4"},"lastName" : "zzz","copiesSold" : 5}
Model.aggregate(..).read('primaryPreferred').exec(callback)
aggregate.skip(10);
// 下面这些是等价的aggregate.sort({ field: 'asc', test: -1 });aggregate.sort('field -test');
{ "_id" : 1, "item" : "ABC1", sizes: [ "S", "M", "L"] }
db.inventory.aggregate( [ { $unwind : "$sizes" } ] )
{ "_id" : 1, "item" : "ABC1", "sizes" : "S" }{ "_id" : 1, "item" : "ABC1", "sizes" : "M" }{ "_id" : 1, "item" : "ABC1", "sizes" : "L" }
{ "_id" : 1, "A" : [ "red", "blue" ], "B" : [ "red", "blue" ] }{ "_id" : 2, "A" : [ "red", "blue" ], "B" : [ "blue", "red", "blue" ] }{ "_id" : 3, "A" : [ "red", "blue" ], "B" : [ "red", "blue", "green" ] }{ "_id" : 4, "A" : [ "red", "blue" ], "B" : [ "green", "red" ] }{ "_id" : 5, "A" : [ "red", "blue" ], "B" : [ ] }{ "_id" : 6, "A" : [ "red", "blue" ], "B" : [ [ "red" ], [ "blue" ] ] }{ "_id" : 7, "A" : [ "red", "blue" ], "B" : [ [ "red", "blue" ] ] }{ "_id" : 8, "A" : [ ], "B" : [ ] }{ "_id" : 9, "A" : [ ], "B" : [ "red" ] }
db.experiments.aggregate([{ $project: { A: 1, B: 1, sameElements: { $setEquals: [ "$A", "$B" ] }, _id: 0 } }])
{ "A" : [ "red", "blue" ], "B" : [ "red", "blue" ], "sameElements" : true }{ "A" : [ "red", "blue" ], "B" : [ "blue", "red", "blue" ], "sameElements" : true }{ "A" : [ "red", "blue" ], "B" : [ "red", "blue", "green" ], "sameElements" : false }{ "A" : [ "red", "blue" ], "B" : [ "green", "red" ], "sameElements" : false }{ "A" : [ "red", "blue" ], "B" : [ ], "sameElements" : false }{ "A" : [ "red", "blue" ], "B" : [ [ "red" ], [ "blue" ] ], "sameElements" : false }{ "A" : [ "red", "blue" ], "B" : [ [ "red", "blue" ] ], "sameElements" : false }{ "A" : [ ], "B" : [ ], "sameElements" : true }{ "A" : [ ], "B" : [ "red" ], "sameElements" : false }
{ $map: { input: <expression>, as: <string>, in: <expression> }
{ _id: 1, quizzes: [ 5, 6, 7 ] }{ _id: 2, quizzes: [ ] }{ _id: 3, quizzes: [ 3, 8, 9 ] }
db.grades.aggregate([{ $project:{ adjustedGrades:{$map:{input: "$quizzes",as: "grade",in: { $add: [ "$$grade", 2 ] }}}}}])
{ "_id" : 1, "adjustedGrades" : [ 7, 8, 9 ] }{ "_id" : 2, "adjustedGrades" : [ ] }{ "_id" : 3, "adjustedGrades" : [ 5, 10, 11 ] }
$cond: { if: { $gte: [ "$qty", 250 ] }, then: 30, else: 20 }
description: { $ifNull: [ "$description", "Unspecified" ] }