You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ID列表从MongoDB集合批量获取Product文档

解决MongoDB批量查询商品ID列表的问题

嘿,我完全懂你的感受——这确实是MongoDB最核心的基础查询能力之一,你其实已经摸到正确方向了,只是差了一点点语法细节!

你之前尝试的match(Product::_id in input)写法不生效,问题出在Kotlin的关键字冲突上:in是Kotlin的内置运算符,直接这么写会被当成Kotlin的集合判断,而不是MongoDB查询DSL里的$in操作符。只需要给in加上反引号,让驱动把它解析成MongoDB的查询操作符就行。

正确的实现方式

方式一:直接用find(更简洁,适合简单查询)

override suspend fun getProductsById(input: List<String>): List<Product> {
    // 用反引号包裹in,对应MongoDB的$in操作符
    return productsCollection.find(Product::_id `in` input).toList()
}

方式二:用aggregate(如果后续需要扩展聚合操作)

如果你确实需要用聚合管道,修正语法后也能正常工作:

override suspend fun getProductsById(input: List<String>): List<Product> {
    return productsCollection.aggregate<Product>(
        match(Product::_id `in` input)
    ).toList()
}

为什么不需要逐个查询?

你担心的多次请求问题完全正确——循环调用findOne会产生N次数据库请求,不仅耗时,还会占用更多连接资源。而$in操作符是MongoDB原生支持的批量查询方式,只需要一次请求就能匹配所有目标ID,效率高得多。

额外小提示

如果传入的input是空列表,MongoDB的$in会直接返回空结果,不需要额外做判空处理,非常省心。

内容的提问来源于stack exchange,提问作者Kerubyte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 13:22:38