Mongodb 有没有一种方法可以让find projection支持操作符,就像我使用$project时一样

Mongodb 有没有一种方法可以让find projection支持操作符,就像我使用$project时一样,mongodb,mongodb-query,Mongodb,Mongodb Query,首先我要指出,我不是在攻击蒙戈。我喜欢Mongo。Mongo很酷 如果我有这样的数据: { a: 2, b: 2 }, { a:3, b:4 } 我可以使用聚合和$project来格式化结果: db.collection.aggregate({ $project: { c: { $add: ["$a", "$b"] } } }) 这将产生 { c: 4 }, { c:7 } 我注意到find函数还支持投影作为第二个参数。但是,如果

首先我要指出,我不是在攻击蒙戈。我喜欢Mongo。Mongo很酷

如果我有这样的数据:

{
  a: 2,
  b: 2
},
{
  a:3,
  b:4
}
我可以使用聚合和$project来格式化结果:

db.collection.aggregate({
  $project: {
    c: {
      $add: ["$a", "$b"]
    }
  }
})
这将产生

{
  c: 4
},
{
  c:7
}
我注意到find函数还支持投影作为第二个参数。但是,如果我这样做:

db.collection.find({}, {
  c: {
    $add: ["$a", "$b"]
  }
});
查询失败

我可以在find中启用基于表达式的投影吗?如果不是,这是出于偶然或设计,还是我自己的愚蠢?

find和$project中的投影工作方式不同。正如您在文档中所看到的,在聚合框架下定义了


顺便说一句,另一个区别是,例如,在find projection中,您可以使用{field:0}符号排除字段,但在聚合管道$project中这是不可能的。

我想您不明白projection如何与find一起工作。投影文档限制所有匹配文档返回的字段。投影文档可以指定字段的包含或排除。但是聚合中的$project阶段允许您执行额外的操作,因为我们正在聚合数据,而不是试图查找文档。是的,我很清楚投影是如何与find一起工作的,它是无齿的,不一致的,但据推测,它与$project处于同一堆栈中。我在质疑这种不一致性是真实的,还是仅仅是表面的。天哪,蒙哥人是怀有敌意的。我不是在攻击Mongo。为什么会有这么多的反对票?这是一个合理的问题?