Как агрегировать данные для запроса mongodb? - PullRequest
0 голосов
/ 12 марта 2019

У меня есть эта коллекция:

{ "_id" : 1, "item_id" : 1, "parent_id" : null, count: 10},
{ "_id" : 2, "item_id" : 2, "parent_id" : 1,    count: 20},
{ "_id" : 3, "item_id" : 3, "parent_id" : null, count: 30},
{ "_id" : 4, "item_id" : 4, "parent_id" : 1,    count: 40}

Если я найду предметы с count > 0, я должен получить предметы:

{ "_id" : 1, "item_id" : 1, "parent_id" : null, count: 10},
{ "_id" : 3, "item_id" : 3, "parent_id" : null, count: 30}

Мы не получили предметы 2, 4, потому чтоони являются дочерними для элемента 1

Если я найду элементы с count > 15, я должен получить элементы:

{ "_id" : 2, "item_id" : 2, "parent_id" : 1,    count: 20},
{ "_id" : 3, "item_id" : 3, "parent_id" : null, count: 30}

Элемент 2 - первый дочерний элемент в условиях, элемент 3 - элементв условиях

Поэтому, если у меня есть родительские элементы, я должен пропустить child, но если у меня только дети, я должен получить только первого дочернего элемента.

Он должен работать с разбиением на страницы и сортировкой.

Есть идеи?

1 Ответ

0 голосов
/ 12 марта 2019

Второй параметр метода find() - это объект, описывающий, какие поля включить в результат.Этот параметр является необязательным, и если он опущен, все поля будут включены в результат.

В Python вы можете сделать что-то вроде этого:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

for x in mycol.find({},{ "_id": 0, "item_id": 0, "count": 1 }):
  print(x)

Вы не можете указывать обаЗначения 0 и 1 в одном и том же объекте, за исключением случаев, когда одно из полей является полем _id.Если вы укажете поле со значением 0, все остальные поля получат значение 1, и наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...