Advanced MongoDB Query needed

爱⌒轻易说出口 提交于 2019-12-11 17:37:51

问题


I am new to MongoDB queries, and I understand the basics of find. However I haven't yet come to grips with $lookup, $project, $aggregate, $match, etc, which is pretty much needed to do anything fancy. And I need a fancy query 😃 See tricky issue below:

Collections:

schema
{ _id: 1, name: “Schema1”, }
{ _id: 2, name: “Schema2”, }

device: 
{ _id: 1, schema: 1, organisation: 2 }
{ _id: 2, schema: 1, organisation: 2 }
{ _id: 3, schema: 2, organisation: 2 }

field:
{ _id: 1, organisation: 2, name: “cost”, displayType: “number” }
{ _id: 2, organisation: 2, name: “retail”, displayType: “number” }
{ _id: 3, organisation: 2, name: “project”, displayType: “string” }

fieldvalue
{ _id: 1, device: 1, field: 1, organisation: 2, value: 2000 }
{ _id: 2, device: 1, field: 2, organisation: 2, value: 3000 }
{ _id: 3, device: 2, field: 1, organisation: 2, value: 1000 }
{ _id: 4, device: 2, field: 2, organisation: 2, value: 1000 }
{ _id: 5, device: 3, field: 1, organisation: 2, value: 500 }
{ _id: 6, device: 1, field: 3, organisation: 2, value: “Project1” }
{ _id: 7, device: 2, field: 3, organisation: 2, value: “Project2” }
{ _id: 8, device: 3, field: 3, organisation: 2, value: “Project2” }

I want to query FieldValue. I want to $sum all “value” where field is 1 BUT only those which “shares” device with field 3 with value “Project2”.

As parameters I have:

The id of the field I want to sum, e.g. 1 (cost)

The id of the "project” field, e.g. 3 (project)

The value of the “project” field (id 3) which also must be met in order to qualify for summation.

So my query should only $sum the “value” of id’s: 3 and 5

How can I do that in Mongo Query?

And would it be possible to add more contraints? E.g. the “schema” of the “device” must be 3, which should then result in a $sum of just id: 5

来源:https://stackoverflow.com/questions/47669390/advanced-mongodb-query-needed

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!