Mongodb 如何在$facet中返回输入文档
我正在寻找一种智能方法,以Mongodb 如何在$facet中返回输入文档,mongodb,aggregation-framework,facet,Mongodb,Aggregation Framework,Facet,我正在寻找一种智能方法,以$facet聚合方式返回输入文档。大概是这样的: db.collection.aggregate([ { <pipeline stage 1> }, { <pipeline stage 2> }, { $facet: { outputField1: [ output of <pipeline stage 2> ], outputField2
$facet
聚合方式返回输入文档。大概是这样的:
db.collection.aggregate([
{ <pipeline stage 1> },
{ <pipeline stage 2> },
{
$facet:
{
outputField1: [ output of <pipeline stage 2> ],
outputField2: [ { <pipeline stage 3> } ]
}
}
])
您也可以执行此操作
{$match:{}
以原样返回当前文档:
{
$facet:
{
outputField1: [{ $match: {} }],
outputField2: [ { <pipeline stage 3> } ] } } }]
}
}
{
$facet:
{
outputField1:[{$match:{}}],
outputField2:[{}]}}]
}
}
不需要在outputField1
和outputField2
中执行两次{}
。关于你的第二个选项,我不确定它到底发生了什么/是否优化了-除非我们看到你的查询:-)你可以使用我的答案,就像基本的.find()
一样,没有任何过滤器,可以返回所有通过的文档。是的,这就是为什么我称它为“解决方案”是的,{$match:{}
也类似于null
操作。事实上,我希望使用一个全局常量—也许它不存在。@WernfriedDomscheit:这是我唯一能想到的,因为如果你想使用任何运算符,那么它应该在像“$project”这样的阶段中使用,该阶段将创建一个对象数组outputField1。或者您可以使用group+push&root来投影一个字段,但这也会在outputField1数组中创建一个对象!!
{
$facet:
{
outputField1: [{ $match: {} }],
outputField2: [ { <pipeline stage 3> } ] } } }]
}
}