У меня следующий запрос:
Documents.find({
$and: [
{
user_id: {$nin:
myUserId
}
},
{ date: { $gte: dateMax, $lt: dateMin } },
{documentTags: {$all: tags}}
],
})
Я пытаюсь сделать часть запроса documentTags необязательной. Я попытался построить запрос следующим образом:
let tags = " ";
if (req.body.tags) {
tags = {videoTags: {$all: req.body.tags}};
}
let query = {
$and: [
{
user_id: {$nin:
myUserId
}
},
{ date: { $gte: dateMax, $lt: dateMin } },
tags
],
}
, а затем Document.find(query)
. Проблема не в том, как я изменяю теги (независимо от того, определены ли они как пробелы или нет). Я получаю различные ошибки, такие как $or/$and/$nor entries need to be full objects
и TypeError: Cannot read property 'hasOwnProperty' of undefined
.
Есть ли способ встроить необязательное требование в запрос? ?
Я попробовал вариант ниже, и запрос просто возвращает все, что соответствует другим полям. По какой-то причине он не фильтруется по тегам. Я console.log(queryArr)
и console.log(query)
получил следующее:
[
{ user_id: { '$nin': [Array] } },
{
date: {
'$gte': 1985-01-01T00:00:00.000Z,
'$lt': 2020-01-01T00:00:00.000Z
}
},
push: { documentTags: { '$all': [Array] } }
]
console.log (query)
{
'$and': [
{ user_id: [Object] },
{ date: [Object] },
push: { documentTags: [Object] }
]
}