关于rust的mongodb驱动count方法无法与near条件一同使用的问题

在Rust项目中遇到使用mongodb driver进行操作时,若count方法结合near条件查询,会出现错误提示'geoNear, $near, and $nearSphere are not allowed in this context'。由于通过mongo shell执行相同查询正常,问题可能出在driver。目前最新版本2.3.0,解决方案是利用find方法结合StreamExt的count()实现计数,但这种方法对于大量数据的计数效率低下,不适用于高成本场景。" 128751840,16431712,张一鸣:创业、产品与人才观,"['创业', '产品设计', '人工智能', '管理理念', '人才招聘']
摘要由CSDN通过智能技术生成

最近在自己的项目中使用 mongodb,遇到了一个比较诡异的问题, 就是如果通过 rust mongodb driver 来对 mongodb 进行操作, 在用 db.collection.count()方法的时候, 如果查询条件里面包含 n e a r ,则会报 ‘ near, 则会报` near,则会报geoNear, $near, and $nearSphere are not allowed in this context`, 一句话没头没尾, 我也搞不清这里面提到的上下文具体指什么, 网上搜了一下, 相关的信息比较少, 大部分也没有正面的回答是哪里的问题,有解决方案的更少。没办法,只能自己试了,通过 mongo shell 执行该查询是可以成功拿到返回值的, 所以基本可以确定是 rust 的 mongodb driver 的问题, 目前版本是 2.3.0, 已经是最新的了, 解决的方法只能是曲线救国了, 将 db.collection.count()改成 db.collection.find(), 因为 db.collection.find()返回的是一个 Stream, futures 这个 crate 提供了对 Stream 的扩展(StreamExt), 里面包括一个 count()方法, 我们可以直接调用得到计数。

但是注意, 因为 Stream 本质上是一个 Iterator, 所以我们这个计数真的是遍历整个结果集得出的, 不管是从时间来讲还是从资源开销来讲, 成本都非常高, 因为我的应用场景一般计数不会超过 7 个, 所以我勉强可以接受, 如果计数较大的场景, 请另寻出路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值