我正在尝试在MongoDB中进行视图以避免不必要的返回。在文档中说聚合函数可以接受带有双美元符号的变量,考虑到这一点,我已经创建了一个观点,在此示例中,应该采用一个变量来过滤customerIds并将结果分组以汇总不同文档的付款。 / p>
示例:
db.createView(
"viewName",
"myCollection",
[{
$match: { "customerId": "$$customerId", }
},{
$group: {
_id: null,
total: "$amount",
}
}]
)
视图创建成功,如果我将一些有效的customerId放在可以正常工作的聚合函数中,但是我丝毫不知道如何执行视图并传递所需的customerID
。 / p>
有什么想法吗?在这种情况下,mongodb文档无法为我提供帮助,我确实需要将其创建为视图,因为有许多应用程序可以连接到该视图。
我尝试过: db.viewName.find({customerId:“某些有效ID”});
答案 0 :(得分:0)
您可以像收藏一样访问它,例如,我通过以下方式创建视图:
db.runCommand({
create: 'AuthorsView',
viewOn: 'authors',
pipeline: [{
"$group": {
"_id": "$email",
"count": {
"$sum": 1
}
}
}]
})
由于这是现有视图,所以我可以简单地进行以下操作:
db.getCollection('AuthorsView').find({})
要查看所有文档或向find
添加更多参数
不确定传递变量的含义,因为视图就像集合……您可以通过find
和aggregate
对它们进行查询。
答案 1 :(得分:0)
首先,如果没有$match
,则不能将变量传递到$expr
。没有错误,因为“ $$ ...”被解释为字符串。
第二,如果我们修复以下问题:
db.createView(
"viewName",
"myCollection",
[{
$match: {$expr:{$eq:["$customerId","$$customerId"]}}, }
},{
$group: {
_id: null,
total: "$amount",
}
}]
)
但是$$
不是系统变量,因此它将不起作用。您可以传递$$ROOT
之类的系统变量或$field.path
的字段路径; 用户定义的变量由系统变量或收集数据组成。