2
是否有一種內置方法可以在MongoDB數據庫中使用正則表達式搜索字段名稱?該文檔列出了$ regex字段來搜索字段值。按字段名稱按正則表達式搜索
是否有一種內置方法可以在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
來完成整個文檔。所以我們基本上把「鑰匙」變成可以搜索的「數據」。
隨着數據轉換,您可以使用簡單的「點符號」和一個常規的$regex
查詢表達式來匹配「鍵」的值。
因此,聚合方法最適合「平面」文檔或處理「已知深度」,並且JavaScript方法最適合將關鍵點嵌套到任何級別。
歸屬爲:How to find MongoDB field name at arbitrary depth爲JavaScript版本搜索的基本部分。僅針對正則表達式進行了修改。