Каков наиболее эффективный способ получить значение по ObjectId в MongoDB с помощью pymongo? - PullRequest
4 голосов
/ 17 февраля 2012
db.test.find_one(ObjectId('4f3dd96d1453373bcb000000'))

или что-то еще целиком? Я знаю, что столбец _id индексируется автоматически, и я надеюсь извлечь выгоду из этой эффективности.

Спасибо! * * 1004

Ответы [ 3 ]

2 голосов
/ 17 февраля 2012

Да, ваш подход верен.

Поскольку вы спрашиваете об эффективности, помните, что при оптимизации операций чтения для повышения производительности вы можете захотеть прочитать только те атрибуты, которые вам нужны.Если определенные атрибуты ваших документов велики, это может значительно снизить затраты на ввод-вывод (передача данных с сервера на клиент).Например, если ваш документ имеет 20 атрибутов, но вы используете только 5 из них, не тяните остальные 15 по проводам.В pymongo это можно сделать с помощью необязательного параметра fields функции collection.find.Очевидно, что здесь необходимо сбалансировать производительность с обслуживаемостью кода, поскольку перечисление атрибутов увеличивает затраты на обслуживание.

Дополнительные рекомендации по оптимизации доступны в официальных документах .Их список включает в себя «Оптимизация № 3: выберите только соответствующие поля», и это то, о чем я говорил выше.

1 голос
/ 17 февраля 2012

Если вы получаете значение конкретно с помощью _id, то я бы сказал, да, это самый эффективный подход.

В зависимости от ваших данных может быть более эффективно индексировать это значение и выполнять поиск по нему.

0 голосов
/ 17 февраля 2012

, если вы знаете _id, чем вы должны звонить только таким способом.db.test.find_one(ObjectId('4f3dd96d1453373bcb000000'))
Ваш полный код в pymongo может быть таким:

connection=Connection(self.host ) #%(self.user_name,self.password))
    #connection1=Connection(host=self.host, port=self.port)
    db=connection[self.db_name]
    db.authenticate(self.user_name, self.password)
    collection=db[self.question_collection]
    obj_id= ObjectId(_id)
    info=collection.find_one(obj_id)
...