Articles of aggregation framework

聚合对象数组中的数据

我有以下架构: { "_id": { "$oid": "58c0204d9f10810115f13e5d" },"OrgName": "A", "modules": [ { "name": "test", "fullName": "john smith", "_id": { "$oid": "58c0204d9f10810115f13e5e" }, "TimeSavedPlanning": 520, "TimeSavedWorking": 1000, "costSaved": 0 }, { "name": "test1", "fullName": "john smith", "_id": { "$oid": "58c020f85437c22215be92cc" }, "TimeSavedPlanning": 0, "TimeSavedWorking": 1000, "costSaved": 500 } ] } 我想聚合在“模块”数组内的所有文档,其中OrgName = A并输出以下总计。 TimeSavedPlanning = 520 (because […]

Mongo根据计算的条件进行sorting

我有一个Mongo集合的消息,看起来像这样: { 'recipients': [], 'unRead': [], 'content': 'Text' } 收件人是用户ID的数组,而unRead是尚未打开邮件的所有用户的数组。 这是按预期工作的,但我需要查询所有消息的列表,以便返回前20个结果,首先优先处理未读的消息,如下所示: db.messages.find({recipients: {$elemMatch: userID} }) .sort({unRead: {$elemMatch: userID}}) .limit(20) 但是这不起作用。 根据是否符合某个标准,对结果进行优先sorting的最佳方法是什么?

将ISOdate转换为yyyy-mm-dd格式

鉴于收集(#name:用户)结构: { "_id" : ObjectId("57653dcc533304a40ac504fc"), "username" : "XYZ", "followers" : [ { "count" : 31, "ts" : ISODate("2016-06-17T18:30:00.996Z") }, { "count" : 31, "ts" : ISODate("2016-06-18T18:30:00.288Z") } ] } 我想根据用户名字段来查询这个集合,ts以'yyyy-mm-dd'格式返回。 预期产出: { "_id" : ObjectId("57653dcc533304a40ac504fc"), "username" : "XYZ", "followers" : [ { "count" : 31, "date" : "2016-06-17" }, { "count" : 31, "date" : […]

MongoDB中的$ nin的非严格行为

在MongoDB中是否有非严格的$ nin版本? 例如 假设我们有一个名为User的模型和一个名为Task的Model var TaskSchema = new Schema({ user_array: [{user: Schema.ObjectId}], }); 一个快速的例子就是这个 task1 : [user1, user2, user4, user7] task2 : [user2, user 5, user7] 如果我有一个用户列表 [user1, user7] 我想select在user_array重叠最less的任务,在这种情况下task2,我知道$ nin严格返回任务包含user1或user7,但我想知道是否有操作$ nin是非严格。 另外,我可以为我写一个DPfunction 任何意见,将不胜感激 谢谢

通过Mongoose的值仅查找数组中的一个项目

这里是我的模式与一些数据的一个例子: client { menus: [{ sections: [{ items: [{ slug: 'some-thing' }] }] }] } 我正在尝试像这样select它: Schema.findOne({ client._id: id, 'menus.sections.items.slug': 'some-thing' }).select('menus.sections.items.$').exec(function(error, docs){ console.log(docs.menus[0].sections[0].items[0].slug); }); 当然,“docs.menus [0] .sections [0] .items [0] .slug”只适用于每个数组中只有一个东西。 如果每个数组中有多个项目,而不必遍历所有内容以find它,我怎么能做到这一点? 如果你需要更多的细节让我知道。

使用MongoDB Aggregation计算多个平均值

我一直负责在一天,一周,一个月和一年中为MongoDB中相当大的一组文档生成平均值。 所有的工作都有一个created领域,我需要基于outputs数组的平均值… 这是一个文件的样子: { __v: 0, _id: ObjectId("535837911393fd0200d8e1eb"), created: ISODate("2014-04-23T21:58:41.446Z"), output: [ { ref: { img: false }, type: "image/png", methods: [ { options: { height: 200, width: 200 }, method: "resize" } ] }, { ref: { img: false }, type: "image/png", methods: [ { options: { height: 400, width: 400 }, method: "resize" […]

MongoDB / Mongoose聚合或$或不按预期工作?

在html中有一些checkboxbutton,我想通过API on.click过滤AJAX结果。 有3种结果:upVote,noVote,downVoted。 根据哪个checkbox被选中,用户将看到upVote,noVote和downVoted文档的组合。 ajax调用API的URL,并且在通过node.js API中的以下循环运行之后,数据到达数据库调用,该循环通过string数组循环[“upVoted”,“noVote”,“downVoted” ](或其任何组合)并将true的布尔值赋给相应的variables: var upVoted = false; var noVote = false; var downVoted = false; storyFiltering.forEach(storyFiltering); function storyFiltering(element, index, array) { if (element == 'upVoted') {upVoted = true} else if (element == 'noVote') {noVote = true} else if (element == 'downVoted') {downVoted = true} } console.log('upVoted: ' + upVoted + ', […]

MongoDB聚合并匹配返回的键

事情是,我正在写一些代码从我的数据库获取用户消息。 数据库有sent_to , sent_by , 消息键和命令我下面得到的数据键是 db.users_messages.aggregate({$group: {_id: {to: "$sent_to", by: "$sent_by"}}}) 这将返回所有sent_to和sent_by Users_IDs的列表。 现在让我们假设,如果user1已经发送消息给user2 ,同时user2已经回复给user1 ,我希望它只返回user1 user2 ,而不是user2 user1 。 而当我稍后检查这个东西的时候,我还剩下分页的事情,因为我正在对汇总应用$限制 。 希望有人能帮助!

需要从$ aggreagate小组阶段返回x个文档

如果我有一堆文件 {_id: mongoId, submittedTo: mongoId, viewCount: 2 } 如果我想返回x数量最高的viewCount为最低的文档(每个submitTo)。 如何使用mongoose/ mongodb进行聚合? 我从这个问题中了解到了$第一个使用MongoDB聚合在数字字段中返回最大值的文档,但是当您需要返回多个文档(每个$ group的_id)时,它的用例似乎无效。 到目前为止,我有 {$sort: {viewCount: -1}}; {$group : {_id: '$submittedTo'}}; 但不知道还有什么需要添加到小组赛阶段,以达到所需的效果。

通过协会的mongoose限制

我有这样一个集合: [ { parent: 'a', d1: '1', d2: '2', d3: '3', w: 10 }, { parent: 'a', d1: '1', d2: '2', d3: '3', w: 20 }, { parent: 'a', d1: '1', d2: '2', d3: '3', w: 30 }, { parent: 'a', d1: '1', d2: '2', d3: '3', w: 40 }, { parent: 'a', d1: '1', […]