Предположим, у меня есть список запросов pymongo и документа. документ может быть (или нет) согласован одним или несколькими запросами pymongo.Определите, соответствует ли документ mongoengine необработанному запросу pymongo в коде
например.
Вот мой документ:
> db.my_collection.findOne()
{
"EmbeddedDoc" : {
"values" : [
NumberLong(1),
NumberLong(2)
]
},
"_id" : ObjectId("515407bbc118555eea07fea5"),
"some_other_value" : "Val",
"my_id" : NumberLong(42),
}
Вот список необработанных запросов PyMongo (связанный с каким-то списком целых чисел):
list_of_queries = [
({'EmbeddedDoc.values': 2}, [1, 3, 5])
({'some_other_value': 'H2G2'}, [6, 5])
({'some_other_value': 'Val'}, [10, 4])
({'my_id': {'$gte': 256}}, [3, 13, 2])
]
Я хочу знать конкатенации списков ints, для запросов, соответствующих конкретному документу. В случае выше, что было бы [1, 3, 5, 10, 4]
Что я сделал, до сих пор, было запрашивая дБ каждый раз (здесь метод на MyCollection
Наследование mongoengine Document
):
def get_list_of_int(self):
ints = []
for query, list_of_ints in list_of_queries:
if bool(MyCollection.objects(my_id=self.my_id, __raw__=query)):
ints.extend(list_of_ints)
return ints
Однако это опрашивает db каждый раз. Несмотря на то, что это быстро (есть индекс на my_id
), мне было интересно, есть ли способ определить, соответствует ли экземпляр Document
конкретному запросу внутри кода вместо запроса на db (список запросов может быть сколь угодно длинным).
Привет, во-первых спасибо за вашу anwser. Я знаю, что поиск выполняется на стороне db-сервера, но я надеялся, что метод на стороне клиента, который дал конкретный документ, знает, совпадает ли запрос или нет (в pymongo, mongoengine или другой lib).Я прыгал, был какой-то код, сделанный для таких случаев (пока не нашел ничего подобного). более того, я не совсем понял вторую часть вашего ответа, можно ли быть более явным? – astreal
Я неправильно понял вашу проблему, удалил оригинальную вторую часть ответа и написал новую опцию - уменьшить карту на стороне сервера. –
Все на стороне JS на самом деле не вариант в моей архитектуре. Таким образом, он остается отображением в Python. Действительно, это большая работа, но в проекте мы решили пойти на этот вариант для «простого» подмножества запросов («просто» в том смысле, что мы не рассматриваем запросы с помощью $ или (могут быть два отдельных запроса) , с $ regex, Geospatial selector и т. д.). Однако мне все еще интересно, существует ли библиотека, которая делает такое сопоставление? – astreal