javascript - 仅基于非空数组的字段匹配
问题描述
我正在尝试对某些东西进行过滤。这是我的Order
模型的简化布局:
{
merchant: <Reference to the merchant>,
date: <Date Object>
name: "Some order name",
ingredients: [{
ingredient: {data: "some data"}
otherData: "some data"
}]
}
我想根据文档中包含的成分查询文档。我有一系列要通过“objectifiedIngredients”搜索的项目。如果里面有成分,那么我想搜索包含该成分的订单。如果数组为空,那么我不想进行查询而只获取所有订单。“objectifiedIngredients”是 ObjectId 的列表。这是我到目前为止所拥有的:
Order.aggregate([
{$match:{
merchant: new ObjectId(req.session.user),
date: {
$gte: from,
$lt: to
},
ingredients: {
$elemMatch: {
ingredient: {
$in: objectifiedIngredients
}
}
}
}}
])
$match
仅当数组中包含元素时,如何运行on 成分?我尝试过使用$cond
,但要么在这里不起作用,要么我没有正确使用它。
解决方案
试试这个
Order.aggregate([
{$match:{
merchant: new ObjectId(req.session.user),
date: {
$gte: from,
$lt: to
},
ingredients: {
$ne: false
}
}}
])
您可以在此处查看更多详细信息
推荐阅读
- javascript - 数组[1][2] 是什么意思?
- python - 无法理解python中的逗号分隔变量
- javascript - 从视频中删除(透明)黑色背景(HTML5 / CSS / JS)
- dynamics-crm - 工作流在超时之前会保持“等待”状态原因多长时间?
- reactjs - React-Router 造成 12969 个高危漏洞
- reactjs - 无法在反应组件中设置状态
- rest - 使用 CQRS 的 RESTful API 设计
- machine-learning - 是什么导致了交叉熵损失的波动?
- java - 有没有办法在 Spring 应用程序中参数化 @Query 值?
- javascript - 是否已从 AD 查看器 API 中删除 ViewingApplication 构造函数?