0
我试图构建查询以实际上有趣的方式与数据库进行交互。其中之一是在一定的年限内搜索文件。我的想法是建立一个聚合管道,在这里我检查是否在搜索表单中选择了年份范围,然后返回匹配的文档。如果未选择范围,则返回所有文档并转到聚合管道的下一个阶段。
这是我曾尝试(只有一个阶段,在aggregate
因为我还没有成功地使这第一个工作,至今):
db.collection('archives').aggregate([
{ $cond: { if: yearStart.length === 4 && yearEnd === 4 },
then: { $match:
{ $and:
[
{ year: {$gte: yearStart} },
{ year: {$lte: yearEnd} }
]
}
},
else: { $match: {} }
}
]).toArray((err, docs) => {
if (err) throw (err)
res.json(docs)
})
所以,这不起作用。我收到错误MongoError: A pipeline stage specification object must contain exactly one field.
。所以我认为这只是一个附带说明的$cond
声明的问题。但不是。我在这里遇到了崩溃。所以我想,也许$cond
并不意味着像这样使用(返回$match
阶段)。我倾向于这样认为,因为文档只显示了一个返回简单值的例子......是不是?
在此先感谢!
聚合管道管道。无条件的。根据用户输入保存应用层的“*,如果在搜索表单中选择了年份范围*”逻辑,并执行不同的查询。 –