В вашем коде вы создаете выражения $ и из двух $ или выражений , но каждоеВыражение $ или имеет только один аргумент каждый, поэтому вы эффективно создаете это выражение $ и find
(обратите внимание, я использую синтаксис оболочки mongo
ниже):
db.dwellings.find({
'$and': [
{ publicationType: 'Venta' },
{ address: { '$in': [ { city: 'La Plata' } ] } }
]
});
... на словах: "найди жилье с публикациейТип Venta
и address.city
La Plata
.
, если я добавлю городЯ получаю 0 результатов, даже когда я должен получить больше
Поскольку вы упоминаете, что ожидаете получить больше результатов, когда добавляете address.city
Я подозреваю, что вы действительно хотите, чтобы выражение верхнего уровня было$or
не $and
, например:
db.dwellings.find({
'$or': [
{ publicationType: 'Venta' },
{ address: { '$in': [ { city: 'La Plata' } ] } }
]
});
Возможно, вы захотите поэкспериментировать с вашим запросом в оболочке mongo
перед тем, как выразить его в виде кода. Если на вашей рабочей станции есть Docker.Я считаю, что запуск mongo
в контейнере полезен для создания прототипов при разработке, например:
docker run --name mongo -d mongo:3.7
# after mongo is up and running...
docker exec -it mongo mongo
В intВ оболочку eractive mongo вы можете вставить документы для тестирования и эксперимента с выражениями find
, например:
use stackoverflow;
dwell1 = { publicationType: 'Venta', address: { city: 'Somewhere' } };
dwell2 = { publicationType: 'Something', address: { city: 'La Plata' } };
db.dwellings.insert(dwell1);
db.dwellings.insert(dwell2);
# Try results of $and
db.dwellings.find({ '$and': [
{ publicationType: 'Venta' },
{ address: { '$in': [ { city: 'La Plata' } ] } }
] });
# ... compare to results of $or
db.dwellings.find({ '$or': [
{ publicationType: 'Venta' },
{ address: { '$in': [ { city: 'La Plata' } ] } }
] });
... после того, как вы вставили несколько документов для тестирования, подтвердите, хотите ли вы $and
или $or
выражение в вашем find
.