mongodb - 在仍然返回根文档时依赖$ gte排除子文档

时间:2014-04-23 13:06:30

标签: mongodb

我想只返回一个子文档,如果它的expire字段是将来的。我的问题是我想得到根文件。

我目前正在使用:

sub.expire: {"$gte": now}

如果sub.expire为true,它只返回根文档。

无论是否返回sub,我将如何返回根文档?

由于

1 个答案:

答案 0 :(得分:1)

这不是MongoDB的设计方式。你是在说它,你试图查询一堆子文档并有条件地返回它们,同时无条件地返回父文档;但就MongoDB而言,没有一个子文档集合,有一个文档集合,每个文档都有字段,其中一些可能是子文档。当你说你在子文档中“使用”这个条件时 - 大概是对于find() - 你真正要求集合的是在子文档中满足这个条件的文档。因此,不会返回满足该条件的文档。

从MongoDB的角度来看,你真正想要的是更接近,返回集合中的每个文档,但是如果某个字段(一个子文档发生的话)被删除,如果它已过期,则属于“投影”。在MongoDB中有两种投影方式,我担心这两种方式都不是你想要的:

  1. find()允许你投射要返回的字段,但是这仅限于:1(do),0(不要),或者如果字段是数组,则为一些特殊操作符,子文档是不

  2. 聚合为您提供$ project运算符来转换结果,但不会让您完全消失此字段(子文档):如果它过去有过期日期,您可以将其替换为null或(可能更好)一个空文档,但是你可以得到尽可能接近。