如果 "by a single result" 指的是findOne样式的返回类型,那么应该不可能这样做。虽然不是说这是不可能的,但它应该而且应该被视为不可能。聚合操作是documented,仅返回aggregate cursors,因此聚合操作的唯一可靠结论应该是aggregate cursor或error。当您收到聚合游标时,您就可以使用它的公开方法来访问单个文档。期待其他任何事情都类似于追求混乱。 PS:*******************************************************************************************************************************************************************************************************************************************************希望能帮助那些可能在这里结束的人。
7条答案
按热度按时间zf9nrax11#
是的,有可能。只需添加一个
$group
级,其中_id
等于null
。这将计算所有输入文档的累积值。例如:或者,如果您只想从聚合结果中获取一个文档,可以使用
$limit
:UPDATE:这两种解决方案都返回 cursor,它将具有单个文档。但是不要认为
findOne
是什么特别的东西。它还检索光标并仅获取第一个文档(如果有的话)。下面是findOne
的mongo shell实现:如您所见,它在内部使用
find
。所以,如果你想得到一个文档而不是一个文档的光标,你可以写你自己的函数,用aggregate
做同样的事情。例如:使用方法:
bvn4nwqk2#
可以将
$match
级添加到聚合管道。但是即使它只匹配一个文档,结果仍然是一个列表(在这种情况下长度为1)。答案是“不,不可能”。neskvpey3#
是的可以。你需要使用mongodb $match操作
这对我来说是有效的。
mondodb doc's示例:
nxowjjhe4#
如果 "by a single result" 指的是
findOne
样式的返回类型,那么应该不可能这样做。虽然不是说这是不可能的,但它应该而且应该被视为不可能。聚合操作是documented,仅返回aggregate cursors,因此聚合操作的唯一可靠结论应该是aggregate cursor
或error
。当您收到聚合游标时,您就可以使用它的公开方法来访问单个文档。期待其他任何事情都类似于追求混乱。PS:*******************************************************************************************************************************************************************************************************************************************************希望能帮助那些可能在这里结束的人。
jrcvhitl5#
在Python中,你可以将结果转换为一个列表并获取第一个元素:
icomxhvb6#
只是为了用另一个简单的解决方案来改进答案,并避免编写大量重复的代码,这是我基于@Sergey别列佐夫斯基答案的解决方案。
就像普通的Aggregate函数一样,你可以这样使用:
这将返回第一个文档,如果存在或空。
希望这将有助于某人的生活。
xfb7svmp7#
我实际上使用的方法是
collection.aggregate(pipeline).next()
对我来说那正是我想要的