Передача строковой переменной в запрос Pymongo

Я пытаюсь очистить базу данных информации, но у меня возникли проблемы с запросом. Вот базовая настройка базы данных в MongoDB:

{
  "ID": 346,
  "data": [
    {
      "number": "23",
      "name": "Winnie"
    },
    {
      "number": "12",
      "name": "Finn"
    },
    {
      "number": "99",
      "name": "Todd"
    }
  ]
}


{
  "ID": 346,
  "data": [
    {
      "number": "12",
      "name": "Ram"
    },
    {
      "number": "34",
      "name": "Greg"
    },
    {
      "number": "155",
      "name": "Arnie"
    }
  ]
}

соответствующий код Python приведен ниже:

import pymongo
import json
import io
import sys
from bson.json_util import dumps
from pymongo import MongoClient
stringArr = ['"23"', '"12"', '"155"']
for x in range(0, len(stringArr))
print(collection.find({"data.number" :  stringArr[x]}).count())

Когда я ввожу collection.find({"data.number" : "23"}).count(), я возвращаю правильное количество записей, которые имеют "23" в качестве числа в данных, поэтому я предполагаю, что мой синтаксис для поиска в Python испорчен, вероятно, связанный с тем, что переменная является строкой, но я Я довольно неопытен в MongoDB, не говоря уже о PyMongo. Любое предложение будет принято с благодарностью!


person dangus poochie    schedule 13.06.2017    source источник
comment
почему у вас есть '"155"', а не просто '155'?   -  person depperm    schedule 13.06.2017
comment
это сработало, спасибо!!!!   -  person dangus poochie    schedule 13.06.2017


Ответы (1)


Оператор $elemMatch используется для сопоставления значений, содержащихся в поле массива, принадлежащем документу BSON.

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

    db.collection.find({
    data: {
        $elemMatch: {
            number: {
                $in: ["23", "12", "155"]
            }
        }
    }
})
person Rubin Porwal    schedule 14.06.2017