gpt4 book ai didi

mongodb - 按正则表达式搜索字段名称

转载 作者:可可西里 更新时间:2023-11-01 09:25:51 25 4
gpt4 key购买 nike

在 MongoDB 数据库中是否有使用正则表达式搜索字段名称的内置方法?文档列出了一个 $regex 字段来搜索字段值。

最佳答案

您可以使用 $where 子句的 JavaScript 评估在任意深度执行此操作:

db.collection.find(
function () {
var findKey = new RegExp("^start");

function inspectObj(doc) {
return Object.keys(doc).some(function(key) {
if ( typeof(doc[key]) == "object" ) {
return inspectObj(doc[key]);
} else {
return findKey.test(key);
}
});
}
return inspectObj(this);
}
)

或者如果您有 MongoDB 3.4 并且只查看文档的“顶层”级别,您可以使用 .aggregate()$objectToArray 执行此操作:

 db.collection.aggregate([
{ "$addFields": {
"finder": { "$objectToArray": "$$ROOT" }
}},
{ "$match": { "finder.k": /^start/ } }
])

这是因为 $objectToArray 接受一个“对象”并将其转换为具有键 “k”“v” 的对象数组对于所提供对象的每个“键”和“值”。我们可以使用 $$ROOT 对整个文档执行此操作。所以我们基本上是把“ key ”变成了可以搜索的“数据”。

转换数据后,您可以使用简单的“点符号”和常规 $regex 查询表达式来匹配“键”的值。

因此,聚合方法最适合“平面”文档或处理“已知深度”,而 JavaScript 方法最适用于可以在任何级别嵌套键的地方。


归因于:How to find MongoDB field name at arbitrary depth 用于搜索 JavaScript 版本的重要部分。仅针对正则表达式修改。

关于mongodb - 按正则表达式搜索字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44254923/

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