关于聚合运行机制的一些问题

时间:2017-01-05 02:45:34

标签: mongodb

Aggregate1:​​

db.collection.aggregate([
  {
    $limit: 1
  },
  {
    $lookup: {
      ...
    }
  }
])

Aggregate2:

db.collection.aggregate([
  {
    $lookup: {
      from: 'collection2',
      localField: 'field',
      foreignField: 'field',
      as: 'newField',
      // do some query when lookup
      query: {'newField.xxx': 1}
    }
  }
])

Aggregate1和Aggregate2有什么不同?

在Aggregate1中,首先扫描整个集合,然后执行$ lookup吗?

如果不同,如何查询某些查询?就像这样:

db.collection.aggregate([
  {
    $lookup: {
      from: 'collection2',
      localField: 'field',
      foreignField: 'field',
      as: 'newField'
    }
  },
  {$unwind: '$newField'},
  {$match: {'newField.xxx': 1}}
])

我知道,我可以这样做:

{ lastName: { $ne: "$lastName" } }

但我担心,就像上面的例子一样,整个集合都会被扫描。

期待您的回复!

现在,我发现这个api:$graphLookup.restrictSearchWithMatch,但是:

  

请注意

     

您不能在此过滤器中使用任何聚合表达式。

     

例如,查询文档,例如

internal
     

将无法在此上下文中查找lastName所在的文档   value与输入文档的lastName值不同,   因为“$ lastName”将充当字符串文字,而不是字段路径。

0 个答案:

没有答案