在MongoDB中通过部分_id值查找/统计文档

3

我希望能够通过在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方法,发现在countDocuments()中不能使用$where运算符,应该使用$expr代替。
不幸的是,我无法使用$expr让任何东西工作,因为我找不到任何有用的示例来帮助我满足我的特定要求。
我只是尝试将$where表达式包装在$expr表达式中,但似乎不起作用(Command aggregate failed: Unrecognized expression '$where'
有人能帮我解决这个问题吗?
1个回答

2
假设_id是ObjectId类型,您可以将其转换为字符串(从{{link3:v4.0}}可用),然后使用正则表达式而无需使用昂贵的JavaScript求值:
db.collection.aggregate([
    { $addFields: { 
        _idString: { $toString: "$_id" } 
    } },
    { $match: { _idString: /5a.*/ } }
] )

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接