gpt4 book ai didi

c# - 在 MongoDB 中按部分 _id 值查找/计算文档

转载 作者:行者123 更新时间:2023-12-04 15:53:46 27 4
gpt4 key购买 nike

我想通过在 GUI 应用程序中输入的部分 _id 值在我的收藏中查找文档。
经过一番搜索后,我发现我至少可以使用以下过滤器通过部分 ID 找到文档:

{ $where: "this._id.str.match(/5a.*/)" }

(其中 5a 是用户输入的部分 id 值)

我处理这些搜索的服务器应用程序也支持分页,所以我总是查询数据库以计算/估计匹配文档的数量。
但是,如果我将此 $where 表达式放入我传递给集合的 CountDocumentsAsync()FilterDefinition 中,我只会得到一个异常:

MongoDB.Driver.MongoCommandException: Command aggregate failed: $where is not allowed in this context

然后我查看了 MongoDB 的 countDocuments 方法,发现 $where 运算符在 countDocuments() 中是不允许的,还有一个应该使用 $expr 代替。

不幸的是,我无法使用 $expr 进行任何操作,因为我找不到任何有用的示例来帮助我满足我的特定要求。
我只是试图将 $where 表达式包装在 $expr 表达式中,但这似乎不起作用(Command aggregate failed: Unrecognized expression '$where' )

谁能帮我解决这个问题?

最佳答案

假设您的 _id 是 ObjectId输入,你可以 convert它到字符串(可从 v4.0 获得)然后在不使用昂贵的 javascript 评估的情况下对其进行正则表达式:

db.collection.aggregate([
{ $addFields: {
_idString: { $toString: "$_id" }
} },
{ $match: { _idString: /5a.*/ } }
] )

作为旁注,正则表达式 /5a.*/ 匹配与 /5a/ 完全相同的字符串。

关于c# - 在 MongoDB 中按部分 _id 值查找/计算文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52773890/

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