Как выполнить $ или запрос в Mongoose / MongoDB? - PullRequest
0 голосов
/ 20 января 2020

Мне нужно получить различные элементы в моей коллекции MongoDB на основе оператора $or.

После этих официальных документов построенный мной запрос выглядит приемлемым, но первый $gt заявление не выполняется. Он возвращает элементы с quantity, равным нулю.

let query = {};

query.$or = [ { 'quantity': { $gt: 0 } }, { type: { $in: [ITEM_TYPE_A, ITEM_TYPE_B] } }];

db.Items.find(query).then( res => res)

Может ли это быть синтаксис dot, добавляющий новую пару ключ / значение к объекту запроса? К сожалению, этот запрос является лишь одним из многих, которые добавляются к объекту query на основе операторов if. Ex. if (something) query.field = value

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Вы можете использовать один из следующих

let query = {};

query = {...query,$or:[ { 'quantity': { $gt: 0 } }, { type: { $in: [ITEM_TYPE_A, ITEM_TYPE_B] } }]};

или

query = Object.assign({}, query, { $or: [ { 'quantity': { $gt: 0 } }, { type: { $in: [ITEM_TYPE_A, ITEM_TYPE_B] } }]});

или

query["$or"] = [ { 'quantity': { $gt: 0 } }, { type: { $in: [ITEM_TYPE_A, ITEM_TYPE_B] } }];
0 голосов
/ 20 января 2020

Я не могу понять, почему, но использование метода Object.assign исправило мой запрос.

Вместо:

query.$or = [ { 'quantity': { $gt: 0 } }, { type: { $in: [ITEM_TYPE_A, ITEM_TYPE_B] } }]

I сделал:

query = Object.assign({}, query, { $or: { 'quantity': { $gt: 0 } }, { type: { $in: [ITEM_TYPE_A, ITEM_TYPE_B]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...