gpt4 book ai didi

javascript - 返回某种类型的有限数量的记录,但返回无限数量的其他记录?

转载 作者:行者123 更新时间:2023-12-03 00:31:35 27 4
gpt4 key购买 nike

我有一个查询,需要返回 10 条“A 类”记录,同时返回所有其他记录。我怎样才能做到这一点?

更新: 诚然,我可以通过两个查询来完成此操作,但如果可能的话,我想避免这种情况,因为我认为这样会减少开销,并且可能会提高性能。我的查询已经是一个聚合查询,同时考虑了两种记录,我只需要限制结果中一种类型记录的数量即可。

更新:以下是突出显示问题的示例查询:

db.books.aggregate([
{$geoNear: {near: [-118.09771, 33.89244], distanceField: "distance", spherical: true}},
{$match: {"type": "Fiction"}},
{$project: {
'title': 1,
'author': 1,
'type': 1,
'typeSortOrder':
{$add: [
{$cond: [{$eq: ['$type', "Fiction"]}, 1, 0]},
{$cond: [{$eq: ['$type', "Science"]}, 0, 0]},
{$cond: [{$eq: ['$type', "Horror"]}, 3, 0]}
]},
}},
{$sort: {'typeSortOrder'}},
{$limit: 10}
])

db.books.aggregate([
{$geoNear: {near: [-118.09771, 33.89244], distanceField: "distance", spherical: true}},
{$match: {"type": "Horror"}},
{$project: {
'title': 1,
'author': 1,
'type': 1,
'typeSortOrder':
{$add: [
{$cond: [{$eq: ['$type', "Fiction"]}, 1, 0]},
{$cond: [{$eq: ['$type', "Science"]}, 0, 0]},
{$cond: [{$eq: ['$type', "Horror"]}, 3, 0]}
]},
}},
{$sort: {'typeSortOrder'}},
{$limit: 10}
])

db.books.aggregate([
{$geoNear: {near: [-118.09771, 33.89244], distanceField: "distance", spherical: true}},
{$match: {"type": "Science"}},
{$project: {
'title': 1,
'author': 1,
'type': 1,
'typeSortOrder':
{$add: [
{$cond: [{$eq: ['$type', "Fiction"]}, 1, 0]},
{$cond: [{$eq: ['$type', "Science"]}, 0, 0]},
{$cond: [{$eq: ['$type', "Horror"]}, 3, 0]}
]},
}},
{$sort: {'typeSortOrder'}},
{$limit: 10}
])

我希望在一个查询中返回所有这些记录,但将类型限制为任何类别的最多 10 条记录。我意识到,当查询像这样分解时, typeSortOrder 不需要是有条件的,最初当查询是一个查询时(这就是我想回到的地方),我就在那里了。

最佳答案

我认为目前(2.6)不可能用一个聚合管道来实现这一点。很难给出一个准确的论据来解释为什么不这样做,但基本上聚合管道执行文档流的转换,一次一个文档。管道内不知道流本身的状态,这是您需要确定是否已达到 A、B 等的限制并且需要删除更多相同类型的文档。 $group 确实将多个文档组合在一起,并允许它们的字段值聚合来影响生成的组文档($sum$avg 等)。 )。也许这有一定道理,但不一定严格,因为您可以添加一些简单的操作来实现基于类型的限制,例如,向 $ 添加一个 $push x 累加器group 仅当被推送到的数组少于 x 个元素时才会推送值。

即使我确实有办法做到这一点,我也建议只进行两次聚合。保持简单。

关于javascript - 返回某种类型的有限数量的记录,但返回无限数量的其他记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25040792/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com