mongodb пусто это подстановочный знак, но только на верхнем уровне? - PullRequest
0 голосов
/ 30 декабря 2011

извините тем, кто не любит Python, мои образцы используют pymongo.

В mongodb empty используется как «подстановочный знак», как здесь (используя «подстановочный знак», я получаю такие же или более результаты):

>>> projects.find_one({'name': 'boodo3', '_id': ObjectId('4efa14c6b0ab584326000000')})
{u'_id': ObjectId('4efa14c6b0ab584326000000'), u'name': u'boodo3', u'updated_at': u'2011-12-28 13:47:09'}
>>> projects.find_one({'name': 'boodo3'})
{u'_id': ObjectId('4efa14c6b0ab584326000000'), u'name': u'boodo3', u'updated_at': u'2011-12-28 13:47:09'}

но если я запрашиваю "внутри" документа, подстановочные знаки больше не работают, как в следующем примере:

>>> testruns.find_one({'_parent': {'_coll': u'projects', '_id': '4efa14c6b0ab584326000000'}})
{u'_parent': {u'_coll': u'projects', u'_id': u'4efa14c6b0ab584326000000'}, u'_id': ObjectId('4efa167eb0ab584351000002'), u'name': u'11121617', u'updated_at': u'2011-12-27 19:03:26'}
>>> testruns.find_one({'_parent': {'_coll': u'projects'}})
>>> <no results here>

Я пробовал варианты с использованием $ in и $ nin, но пока безуспешно. Я надеюсь, что есть какой-то структурированный способ запроса документов (я имею в виду что-то кроме регулярных выражений). Я бы реструктурировал свои коллекции в случае необходимости, но я считаю, что плоские документы здесь не выход.

Значит ли это, что мне нужно перевести все запросы в точечную нотацию? Или regex способ запрашивать документы в mongodb?

отказ от ответственности: я не собираюсь критиковать mongodb или что-либо еще. Это мое первое приложение, которое использует mongodb, и я хочу научиться запрашивать документы в mongodb.

Ответы [ 2 ]

4 голосов
/ 31 декабря 2011

Этот запрос: testruns.find_one({'_parent': {'_coll': u'projects'}}) Ищет документы, в которых _parent равен {'_coll': u'projects'}, у которых нет совпадений, поскольку в документе также есть другие ключи, поэтому равенство не выполняется - понятия "нет""подстановочный знак" здесь.Попробуйте свой запрос так:

testruns.find_one({'_parent._coll': u'projects'})

0 голосов
/ 10 апреля 2019

Пожалуйста, обновите заголовок, так как сам вопрос неверен.

"Как искать критерии вложенных документов в mongodb" , который является дубликатом:

Как правильно запросить вложенный документ MongoDB с помощью python?

Ответы также приведены в документации mongodb здесь:

https://docs.mongodb.com/manual/tutorial/query-embedded-documents/

В разделе «Укажите совпадение равенства»на вложенном поле "

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