将变量传递给 MongoDB 视图

Hug*_*azo 9 mongodb

我正在尝试在 MongoDB 中创建视图以避免不必要的回报。在文档中说聚合函数可以使用带有双美元符号的变量,考虑到这一点,我创建了一个视图,在这个示例中应该使用一个变量来过滤 customerIds 并将结果分组以总结不同文档的付款。

例子:

db.createView(
  "viewName",
  "myCollection",
  [{
    $match: {  "customerId": "$$customerId", }
  },{
    $group: {
      _id: null,
      total: "$amount",
    }
  }]
)
Run Code Online (Sandbox Code Playgroud)

视图创建正常,如果我在聚合函数中放置了一些有效的 customerId 可以正常工作,但我不知道如何执行视图并传递customerID我需要的。

有任何想法吗?在这种情况下,mongodb 文档对我没有帮助,我真的需要将其创建为视图,因为有许多应用程序将连接到此视图。

我试过: db.viewName.find({customerId: "some valid id"});

Akr*_*ion 1

您可以像访问集合一样访问它,例如我正在通过以下方式创建视图:

db.runCommand({
  create: 'AuthorsView',
  viewOn: 'authors',
  pipeline: [{
    "$group": {
      "_id": "$email",
      "count": {
        "$sum": 1
      }
    }
  }]
})
Run Code Online (Sandbox Code Playgroud)

由于这是现在的现有视图,我可以简单地执行以下操作:

db.getCollection('AuthorsView').find({})
Run Code Online (Sandbox Code Playgroud)

查看所有文档或向其中添加更多参数find

不确定传递变量是什么意思,因为视图就像集合一样......您可以通过find&对它们运行查询aggregate

  • 有没有找到解决方案?这正是我要找的。我有一个以 $match 开头的视图,它限制发送到管道其余部分的数据,但我需要向 $match 传递一个值。 (6认同)
  • 这里的问题是过滤器方法在聚合管道之后起作用。通过传递变量,我希望视图接收例如公司 ID 来仅计算该公司的金额。例如:`db.myView({companyId: 'somevalidid'})` (3认同)