我在MongoDB集合中有大约200,000个文档,我只需要获取具有特定内容的文档。
例如,
{
"_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 }
答案 0 :(得分:2)
然后使用$in
查找两者:
db.collection.find({ "json.o.2": { "$in": ["9",9] } })
的简写形式
db.collection.find({ "$or": [{ "json.o.2": "9" }, { "json.o.2": 9 } ])
一般情况是实际搜索“或”值,因为你有一个完全匹配条件,那就完全没问题。 MongoDB也不关心路径是普通值还是数组。
答案 1 :(得分:2)
您可以在没有任何正则表达式的情况下轻松实现此目的,但使用 $or
运算符。
此查询应该完成工作:
db.collection.find({$or: [{"json.o.2": 9}, {"json.o.2": "9"}]})