猫鼬聚合中$ match的多条件检查

时间:2019-03-10 13:28:07

标签: mongoose

我可以那样做吗?这是我的查询。

const result = await transactionDbSchema.aggregate([
{
$unwind: "$transactions"
},
{
$replaceRoot: { newRoot: "$transactions" }
},
{ $match: { from: req.params.address,to: 
req.params.address} }
]);

我必须用名称“ from”和“ to”键入数据库,并且我收到的地址“ req.params.address”可能在数据库的“ from”或“ to”密钥中。我想搜索地址为“ req.params.address”的所有对象。我尝试以这种方式进行操作,但它给出了空数组。

1 个答案:

答案 0 :(得分:0)

当您在$match中放置多个条件时,默认情况下将其视为$and,它将尝试匹配所有给定条件,并仅返回所有条件都满足的那些文档。

但是从您的问题来看,您似乎需要在fromto字段中找到地址所在的所有文档。

您可以为此目的使用$or

尝试一下:

const result = await transactionDbSchema.aggregate([
{
    $unwind: "$transactions"
},
{
    $replaceRoot: { newRoot: "$transactions" }
},
{   
    $match: { 
        $or : [{ from: req.params.address } ,
               { to:req.params.address}]
    }
}
]);

详细了解MongoDb $or operator here