【发布时间】:2014-03-25 18:46:12
【问题描述】:
我使用的是 MongoDB 版本 2.4.8。
[test] 2014-03-25 14:42:13.0 >>> db.users.getIndexes();
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "test.users",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"username" : 1,
"age" : 1
},
"ns" : "test.users",
"name" : "username_1_age_1"
},
{
"v" : 1,
"key" : {
"age" : 1,
"username" : 1
},
"ns" : "test.users",
"name" : "age_1_username_1"
}
]
[test] 2014-03-25 14:44:36.550 >>>
[test] 2014-03-25 14:33:12.945 >>> db.users.find({"age" : 14, "username" : /.*/}).explain()
{
"cursor" : "BtreeCursor age_1_username_1 multi",
"isMultiKey" : false,
"n" : 16850,
"nscannedObjects" : 16850,
"nscanned" : 16850,
"nscannedObjectsAllPlans" : 16850,
"nscannedAllPlans" : 16850,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 86,
"indexBounds" : {
"age" : [
[
14,
14
]
],
"username" : [
[
"",
{
}
],
[
/.*/,
/.*/
]
]
},
"server" : "server01:27017"
}
解释输出在其username 部分中的含义是什么?
"username" : [
[
"",
{
}
],
[
/.*/,
/.*/
]
]
我无法理解这部分否
不管我是正式还是非正式地看待它。
【问题讨论】:
-
不是一个真正的答案,但您为什么要查询“匹配所有内容”正则表达式?听起来您可以使用
$exists或$type来查询“有用户名”或“有一个字符串的用户名”。 -
@Avish 这只是我在书中找到的一个例子。
-
非常糟糕的例子——你确定这不是无关的例子吗?无论如何,匹配所有内容的正则表达式都无法有效地使用任何索引。
-
@AsyaKamsky 糟糕还是美好,我不知道。第 101 页:shop.oreilly.com/product/0636920028031.do
-
我们知道您正在阅读这本书(您已经发布了几个引用此问题的问题),但是这里提出的两点在我的回答(最后一点)中突出显示,即解释的第一部分输出反映了给定查询的“匹配一切”性质。答案进一步解释了为什么这种特殊形式用于“正则表达式”操作。如果你真的有问题,就问他们的答案。但是解释应该很清楚。试着对Asya“好”。她是 MongoDB 的“枪支”疑难解答者之一。有一天你可能需要她。