Правильный способ поиска документов по DBRef в pymongo

У меня есть следующие документы в моей БД

> db.person.find()
{ "_id" : ObjectId("1122"), "name" : "Alice", "age" : 20 }
{ "_id" : ObjectId("3344"), "name" : "Bob", "age" : 21 }
> db.article.find()
{ "_id" : ObjectId("aaaa"), "authors" : [ { "$ref" : "person", "$id" : "1122" } ] }
{ "_id" : ObjectId("bbbb"), "authors" : [   {
        "$ref" : "person",
        "$id" : "1122"
    },  {
        "$ref" : "person",
        "$id" : "3344"
    } ] }

и это код, который я пытался найти статьи, авторы которых содержат Боб

import pymongo
import bson.objectid

db = pymongo.MongoClient()['test']

bob_id = bson.objectid.ObjectId('3344')

article = db.article.find_one({ 'authors': { '$in': [ bob_id ] } })
print article
# None

article = db.article.find_one({ 'authors.$id': { '$in': [ bob_id ] } })
print article
# None

article = db.article.find_one({ 'authors.$id': { '$in': [ str(bob_id) ] } })
print article
# { article object }

Это приводит к тому, что строковое представление должно быть передано вместо ObjectId если я хочу найти какие-либо документы DBRefв пимонго.

Монго или пимонго делают только совпадение строк для этого (и, следовательно, теряют эффективность)? Есть ли более правильный способ сделать справочные запросы?

0 ответов

Другие вопросы по тегам