Коллекция подмножеств на основе массива NumberInt

#mongodb #subset

#mongodb #подмножество

Вопрос:

Я работаю с MongoDB впервые. Моя коллекция содержит следующие данные

 "VendorName":"ABC Realtors",
"SiteDetails":"MainSite",
"Cdays": 8,
"Year": NumberInt(2019),
"Month": "April",
"YearMon": "April_2019",
"Cluster": NumberInt(6538)
  

Я пытаюсь подмножить коллекцию на основе списка Cluster элементов, и ниже приведен мой код:

    db.collection.find({Cluster : 6538 })
  

При этом выводятся все записи в консоли

Однако это не:

 db.collection.find({Cluster : {"$all":[6538,28]  }})
  

Как я могу получить все записи на основе массива значений NumberInt из Mongodb. Я не уверен, связано ли это с загрузкой данных в mongodb. Я использовал следующие шаги:

 df=pd.read_csv("/home/ubuntu/er.csv",encoding='ISO-8859-1')
records = json.loads(df.to_json(orient="records"))
col.insert_many(records)
  

Ответ №1:

Оператор $all выбирает документы, в которых значением поля является массив, содержащий все указанные элементы

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

Вы могли бы использовать $in вместо $all который находит документы, где поле кластера содержит одно из значений.

 db.collection.find({Cluster : {"$in":[6538,28]  }})
  

Комментарии:

1. Спасибо. $in Также не работает. он ничего не возвращает. Я не уверен, связано ли это с тем, как я загрузил данные. Я обновил свой вопрос.

2. Play — можете ли вы создать воспроизводимый сценарий?. Это работает так же, как в ссылке воспроизведения. Пожалуйста, проверьте и сообщите ne

3. Yes…it действительно работает. не уверен, почему это не работает в моем случае. Любые дальнейшие мысли по этому поводу… Я все равно принимаю ваш ответ.

4. Пожалуйста, удалите 28 из запроса и попробуйте. Это не должно быть проблемой. Убедитесь, что данные имеют тип number. Убедитесь, что данные не находятся внутри пути, что означает вложенный документ. Убедитесь, что имя поля точно совпадает во всех ваших документах. Пожалуйста, добавьте документ, который, как ожидается, будет частью выходных данных, но нет. Я также помогу вам.