我可以那样做吗?这是我的查询。
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”的所有对象。我尝试以这种方式进行操作,但它给出了空数组。
答案 0 :(得分:0)
当您在$match
中放置多个条件时,默认情况下将其视为$and
,它将尝试匹配所有给定条件,并仅返回所有条件都满足的那些文档。
但是从您的问题来看,您似乎需要在from
或to
字段中找到地址所在的所有文档。
您可以为此目的使用$or
。
尝试一下:
const result = await transactionDbSchema.aggregate([
{
$unwind: "$transactions"
},
{
$replaceRoot: { newRoot: "$transactions" }
},
{
$match: {
$or : [{ from: req.params.address } ,
{ to:req.params.address}]
}
}
]);