我有一个看起来像这样的MongoDB集合:
> db.Log.findOne()
{
"_id" : ObjectId("4f456b6413536c52836ed9d2"),
"action" : "POST",
"url" : "/path/to/resource",
"query" : "key1=value1,;key2=value2,;key3=value3",
"startDate" : ISODate("2012-02-22T22:25:39.517Z"),
"endDate" : ISODate("2012-02-22T22:25:40.450Z")
}
以下是我从以下查询中得到的回复:
> db.Log.find( { query: { $regex: /key1/, $options:'i' } } )
error: {
"$err" : "Can't canonicalize query: BadValue unknown top level operator: $regex",
"code" : 17287
}
如果它是“查询”以外的某些字段(例如“url”),则相同的查询可以正常工作。字段名称“查询”是否对正则表达式查询有特殊解释?
答案 0 :(得分:2)
看起来MongoDB正在将query
视为与$query
运算符相同。
如果您将查询放在$query
运算符(或其他query
)中,它就有效:
db.Log.find( {$query: { query: { $regex: /key1/, $options:'i' } } } )
这并非特定于您使用$regex
,因为我可以使用其他查询重现该问题。
检查了MongoDB JIRA,这是一个已知问题:SERVER-8025。