- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个带有索引的集合:
{
"UserId" : 1,
"ShareId" : 1,
"ParentId" : 1,
"DeletedDate" : 1
}
如果我进行查询:
db.Files.find({ "UserId" : ObjectId("5450d837f32a1e098c844e2a"),
"ShareId" : ObjectId("5450d879f32a1e098c844e94"),
"ParentId" : ObjectId("5450d8af6a092a0b74a44026"),
"DeletedDate":null},
{_id:0, ShareId:1}).explain()
输出显示 "indexOnly": false:
{
"cursor" : "BtreeCursor UserId_1_ShareId_1_ParentId_1_DeletedDate_1",
"isMultiKey" : false,
"n" : 2120,
"nscannedObjects" : 2120,
"nscanned" : 2120,
"nscannedObjectsAllPlans" : 2318,
"nscannedAllPlans" : 2320,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 21,
"nChunkSkips" : 0,
"millis" : 42,
"indexBounds" : {
"UserId" : [
[
ObjectId("5450d837f32a1e098c844e2a"),
ObjectId("5450d837f32a1e098c844e2a")
]
],
"ShareId" : [
[
ObjectId("5450d879f32a1e098c844e94"),
ObjectId("5450d879f32a1e098c844e94")
]
],
"ParentId" : [
[
ObjectId("5450d8af6a092a0b74a44026"),
ObjectId("5450d8af6a092a0b74a44026")
]
],
"DeletedDate" : [
[
null,
null
]
]
},
"server" : "mongowecntprod:27017",
"filterSet" : false,
"stats" : {
"type" : "PROJECTION",
"works" : 2124,
"yields" : 21,
"unyields" : 21,
"invalidates" : 0,
"advanced" : 2120,
"needTime" : 0,
"needFetch" : 2,
"isEOF" : 1,
"children" : [
{
"type" : "KEEP_MUTATIONS",
"works" : 2124,
"yields" : 21,
"unyields" : 21,
"invalidates" : 0,
"advanced" : 2120,
"needTime" : 1,
"needFetch" : 2,
"isEOF" : 1,
"children" : [
{
"type" : "FETCH",
"works" : 2124,
"yields" : 21,
"unyields" : 21,
"invalidates" : 0,
"advanced" : 2120,
"needTime" : 1,
"needFetch" : 2,
"isEOF" : 1,
"alreadyHasObj" : 0,
"forcedFetches" : 0,
"matchTested" : 2120,
"children" : [
{
"type" : "IXSCAN",
"works" : 2121,
"yields" : 21,
"unyields" : 21,
"invalidates" : 0,
"advanced" : 2120,
"needTime" : 1,
"needFetch" : 0,
"isEOF" : 1,
"keyPattern" : "{ UserId: 1, ShareId: 1, ParentId: 1, DeletedDate: 1 }",
"isMultiKey" : 0,
"boundsVerbose" : "field #0['UserId']: [ObjectId('5450d837f32a1e098c844e2a'), ObjectId('5450d837f32a1e098c844e2a')], field #1['ShareId']: [ObjectId('5450d879f32a1e098c844e94'), ObjectId('5450d879f32a1e098c844e94')], field #2['ParentId']: [ObjectId('5450d8af6a092a0b74a44026'), ObjectId('5450d8af6a092a0b74a44026')], field #3['DeletedDate']: [null, null]",
"yieldMovedCursor" : 0,
"dupsTested" : 0,
"dupsDropped" : 0,
"seenInvalidated" : 0,
"matchTested" : 0,
"keysExamined" : 2120,
"children" : []
}
]
}
]
}
]
}
}
但是如果我在没有 DeletedDate 的情况下进行查询:
db.Files.find({ "UserId" : ObjectId("5450d837f32a1e098c844e2a"),
"ShareId" : ObjectId("5450d879f32a1e098c844e94"),
"ParentId" : ObjectId("5450d8af6a092a0b74a44026")},
{_id:0, ShareId:1}).explain()
然后 "indexOnly"
为 true
。
如何将第一个查询更改为 indexOnly=true
?
最佳答案
让我给你一个简单的例子,希望它能展示你在查询一个为空的字段时看到的情况:
db.nullexplain.find()
{ "_id" : ObjectId("5456759f51a9d5271dc55bba"), "a" : 1 }
{ "_id" : ObjectId("545675a251a9d5271dc55bbb"), "a" : null }
{ "_id" : ObjectId("545675a551a9d5271dc55bbc") }
db.nullexplain.ensureIndex({a:1})
db,nullexplain.count({a:1}).count()
1
db.nullexplain.count({a:null}).count()
2
你看到问题了吗?当“a”存在并显式设置为 null 时,它被索引为 null。
当文档中不存在“a”时,它也被索引为 null。
当你查询时:
db.nullexplain.find({a:null},{_id:0,a:1})
{ "a" : null }
{ }
我们如何才能从索引中得出返回文档是否应该将字段“a”设置为空,或者该字段是否根本不应该存在?答案是我们不能,因此我们必须检查文件本身。
db.nullexplain.find({a:null},{_id:0,a:1}).explain()
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 3,
"nscanned" : 3,
"nscannedObjectsAllPlans" : 3,
"nscannedAllPlans" : 3,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 3,
"server" : "Asyas-MacBook-Pro.local:27017",
"filterSet" : false
}
希望这可以帮助您理解为什么查询 DeletedDate:null
必须检查文档并且不能从索引中得到回答。
关于mongodb - 为什么 indexOnly==false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26654735/
我收到 Firebase 警告“使用未指定的索引。请考虑在/user/544dceb6-98d-4f7e/clients 添加 ".indexOn": "E-mail"。 我添加的规则是: { "
我的数据设置如下: Tasks:{ Group 1:{ pushid1:{ date: 18921949021, title: "Do something"
您在下面看到的当前查询效率不高,因为我没有设置正确的索引。我在 Xcode 的控制台中收到建议 Consider adding ".indexOn": "users/kxSWLGDxpYgNQNFd3
您在下面看到的当前查询效率不高,因为我没有设置正确的索引。我在 Xcode 的控制台中收到建议 Consider adding ".indexOn": "users/kxSWLGDxpYgNQNFd3
我有一个大约有 7 - 8k 用户的数据库,每次我执行 getChildrenCount() 来计算我的应用程序中有多少人时,我真的需要等待很长时间才能处理并到来上。 我想知道是否有一种方法可以在我的
我尝试使用 Firebase (2.2.5) API/.orderByChild('score') 操作,并且我不断得到 No index defined for score 尽管 Firebase
所以我有这样的数据: pushNotifications { -K - RwEgd541PIGNOXXUH: { message: "Xiaoyu Hugh Hou bid a
我有一个从 Firebase 实时数据库检索的 content 节点。我利用 .orderByChild("time") 获取按最早时间戳排序的前 5 个博客对象的数据快照。我 我目前正在尝试使用 .
我对 firebase 的索引有一些疑问。这是我的 Firebase 结构: merchants { merchantID1 : { merchantName :
我正在使用以下查询创建条目 var newMessageRef = friendlyChat.database.ref().child('dinos').push() newMessageRef.se
Firebase 结构: { "config" : [ { "config1" : { "hideimage" : true } },
我在 stackoverflow 上搜索了很多并阅读了很多问题我有 3 个 indexOn 问题,其中 2 个已解决,1 个仍然存在我正在对数据库进行排序,并在成功运行的“Collection 夹”和
我在 swift 中使用 firebase 从 firebase 实时数据库中读取一些数据。当我在 firebase 面板中有一个项目时它工作正常,但今天添加另一个项目后我得到了这样的错误 2017-
我想弄清楚如何从 iOS 应用程序使用 Geofire。但是我在规则定义方面失败了。 这就是我的数据集的样子: offers:{ user1:{ name : "Steph",
我正在尝试使用 firebase 查询获取情绪等于 M1 的所有帖子,如下所示: db.ref(`Recommendations`).orderByChild(`post/vote/moodTags/
我有一个名为 search2 的集合,其中包含大约 20000 个这样的文档: { "loc": { "type": "Polygon", "c
我有一个带有索引的集合: { "UserId" : 1, "ShareId" : 1, "ParentId" : 1, "DeletedDate" : 1 } 如果我进
我在 xcode 中遇到这个错误: 使用未指定的索引。考虑将/groups 处的 ".indexOn": "members/rsenov"添加到您的安全规则中以获得更好的性能 这是我的 JSON 数据
我已经开始测试 Firebase,但我无法弄清楚关于索引的一件事。我正在根据阅读的内容创建一个结构 - Firebase Data Structuring - 类似于用户和组的示例。 JSON 树看起
我有一堆要使用 .indexOn 建立索引的键 假设我的数据如下所示。我希望能够使用 .orderByChild("height") . { "lambeosaurus": { "stat
我是一名优秀的程序员,十分优秀!