2017-06-12 44 views
2

我在MongoDB集合中有大約200k個文檔,我只需要獲取具有特定內容的文檔。在字段中搜索字符串或數字

例如,

{ 
    "_id": ObjectID("593ddb4f02a8b0e23446ad65"), 
    "instance_id": "166143", 
    "json": { 
    "o": { 
     "2": [9] 
    } 
    } 
} 

我想,在json.o.2有9個文件,但問題是,json.o.2可以是一個對象,它可以是一個字符串&也比如我想一個整數得到所有這些的

"2": [9] 
... 
"2": 9 
... 
"2": "9" 
... 
"2": ["9"] 

我試圖用正則表達式,但它沒有工作

'json.o.2': { '$regex': /^(\[?)(.*)(,?)("?)9("?)(,?)(.*)(\]?)$/i } 

我還需要得到不包含特定號碼的所有文件,我用正則表達式也爲這種情況下,但它不工作太

'json.o.2': { '$regex': /^([?)([^3]*)(,?)("?)([^3]*)("?)(,?)([^3]*)(]?)$/i } 

回答

2

然後尋找都與$in

db.collection.find({ "json.o.2": { "$in": ["9",9] } }) 

$in的操作基本上是$or

db.collection.find({ "$or": [{ "json.o.2": "9" }, { "json.o.2": 9 } ]) 

的簡寫形式的一般情況是,「要麼」值實際上š因爲你有一個完全匹配的條件,那就很好了。如果路徑是一個普通的值或者在一個數組中,MongoDB也不關心。

1

你可以很容易地實現這個沒有任何正則表達式,但與$or操作符。

這個查詢應該做的工作:

db.collection.find({$or: [{"json.o.2": 9}, {"json.o.2": "9"}]})