任何人都知道mongoDB查询不应该是非索引的原因:真的吗?
任何人都知道mongoDB查询不应该是非索引的原因:真的吗 我希望我犯了一个愚蠢的错误。。。。我看不出我做错了什么,为什么这不是一个涵盖的问题 我正在使用MongoDB 2.4.6 以下是复制的步骤:任何人都知道mongoDB查询不应该是非索引的原因:真的吗?,mongodb,Mongodb,任何人都知道mongoDB查询不应该是非索引的原因:真的吗 我希望我犯了一个愚蠢的错误。。。。我看不出我做错了什么,为什么这不是一个涵盖的问题 我正在使用MongoDB 2.4.6 以下是复制的步骤: db.Test.insert({"_id" : ObjectId("5261ac33e4b070ca9e1480d1"), "date" : ISODate("2013-10-18T21:46:27.476Z"), "disabled" : false, "userHidden" : false,
db.Test.insert({"_id" : ObjectId("5261ac33e4b070ca9e1480d1"), "date" : ISODate("2013-10-18T21:46:27.476Z"), "disabled" : false, "userHidden" : false, "postId" : NumberLong(103)})
db.Test.ensureIndex({ "postId" : 1, "userHidden" : 1, "disabled" : 1, "date" : -1}, {name: "findByPostId", sparse: true, unique: false})
db.Test.find( { $query: {postId: 103, userHidden: false, disabled: false}, $orderby: {date: -1}, $hint: "findByPostId", $explain: 1 }, {postId: 1, userHidden: 1, disabled: 1, date: 1 } ).pretty()
{
"cursor" : "BtreeCursor findByPostId",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 1,
"nscanned" : 1,
"nscannedObjectsAllPlans" : 1,
"nscannedAllPlans" : 1,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"postId" : [
[
103,
103
]
],
"userHidden" : [
[
false,
false
]
],
"disabled" : [
[
false,
false
]
],
"date" : [
[
{
"$maxElement" : 1
},
{
"$minElement" : 1
}
]
]
},
我想出来了。希望这能帮助其他人 这就是问题所在: 默认情况下,MongoDB在查询结果中包含_id字段。那么,如果 索引不包括_id字段,则必须排除 _查询结果中的id字段(即_id:0) 通过将_id:0添加到投影中,我得到了间接的真值
> db.Test.find( { $query: {postId: 103, userHidden: false, disabled: false}, $orderby: {date: -1}, $hint: "findByPostId", $explain: 1 }, {_id: 0, postId: 1, userHidden: 1, disabled: 1, date: 1 } ).pretty()
{
"cursor" : "BtreeCursor findByPostId",
"isMultiKey" : false,
"n" : 3,
"nscannedObjects" : 0,
"nscanned" : 3,
"nscannedObjectsAllPlans" : 0,
"nscannedAllPlans" : 3,
"scanAndOrder" : false,
"indexOnly" : true,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"postId" : [
[
103,
103
]
],
"userHidden" : [
[
false,
false
]
],
"disabled" : [
[
false,
false
]
],
"date" : [
[
{
"$maxElement" : 1
},
{
"$minElement" : 1
}
]
]
}
您必须通过_id:0忽略_id