我有一个模糊的内存,如果查询使用未索引的字段,MongoDB将向其日志输出一条消息,但是我无法在本地重现此消息(公认的小数据集),也没有找到任何文档.我是在想象事情还是有这样的功能?如果是,任何人都可以链接到文档吗? 最佳答案 您需要打开分析才能从mongodb获取有意义的日志-将分析设置为1就足够了。然后您可以在日志中使用任意数量的搜索来查找未索引的查询,例如:grepnscanned/path/to/mongodb.log|grep-v"nscanned:1"|grep-v"nscanned:0"我发现这件事的原始推文:http
我有一个bool标志:finished。我应该A:index({finished:1})B:index({finished:1},{sparse:true})C:useflag:unfinishedinstead,toquerybythatD:other?Rubymongoid语法。我的大多数记录都有finished=true标志,而且大多数操作显然会获取那些未完成的记录。我不确定我是否了解何时使用稀疏以及何时不使用。谢谢! 最佳答案 稀疏标志有点奇怪。要了解何时使用它,您首先必须了解为什么存在“稀疏”。当您在一个字段上创建一个简单
我有一个包含3个数字属性的复合_id:_id":{“keyA”:0,“keyB”:0,“keyC”:0所讨论的数据库有200万个相同的KeyA值和50万个相同的KeyB值的集群。我的理解是我可以使用以下命令有效地查询KeyA和KeyB:find({"_id.KeyA":1,"_id.KeyB":3}).limit(100)当我解释这个查询时,结果是:"cursor":"BasicCursor","nscanned":1000100,"nscannedObjects":1000100,"n":100,"millis":1592,"nYields":0,"nChunkSkips":0,"i
我一直在研究MongoDB。感觉不错。我在集合中添加了一些索引,上传了一堆数据,然后删除了所有数据,我注意到索引没有改变大小,类似于报告的行为here.如果我打电话db.repairDatabase()然后索引被压缩到接近于零。同样,如果我不删除所有数据,而是调用repairDatabase(),索引会稍微压缩(可能是因为未使用的扩展被截断了?)。我从db.collection.stats()的“totalIndexSize”获取索引大小。但是,这需要很长时间(我读到在大型数据库上可能需要数小时)。我不清楚数据库在运行时读取或写入的可用性如何。我猜不太可用。由于我想运行尽可能少的mon
我正在对约40K文档的集合执行whereinbox查询。查询耗时约0.3秒,获取文档耗时约0.6秒(结果集中约有10K文档)。文档相当小(每个约100字节),我限制结果只返回纬度/经度。看起来非常慢。这是对的还是我做错了什么? 最佳答案 确实看起来很慢。例如,我在PostgreSQL上进行的大致相同的搜索几乎快到无法衡量(即可能快于1毫秒)。我不太了解MongoDB,但你确定地理空间索引真的打开了吗?(我问是因为在RDBMS中很容易定义一个包含几何/地理列的表,但没有适本地定义实际索引,因此您获得的性能与您描述的大致相同)。
确保数组元素的索引对我来说没有按预期工作。例如具有以下数据>db.test.find(){"_id":7891236423,"arr":["a","b","c"]}{"_id":7891236424,"arr":["b","c","d"]}{"_id":7891236425,"arr":["b","c","a"]}>当没有索引时,以下查询按预期工作>db.test.find({"arr.0":"a"}){"_id":7891236423,"arr":["a","b","c"]}>但如果我尝试在arr.0上创建索引,相同的查询不会返回结果>db.test.ensureIndex({"ar
好吧,随着我在Mongodb中的开发越来越多,我开始怀疑是否需要多个集合与拥有一个带索引的大型集合(因为与表格数据不同,每个文档的列和字段可能不同)。如果我试图以尽可能最有效的方式进行开发(意味着更少的代码和可重用的代码),那么我可以对所有文档使用一个集合并只在一个字段上建立索引。通过将所有文档放在一个带有索引的集合中,我可以重用我所有的表单处理代码和其他代码,因为它们都将插入到同一个集合中。例如:假设我正在开发一个联系人管理器,我有两种类型的联系人“个人”和“企业”。我最初的想法是创建一个名为个人的集合和另一个名为企业的集合。但那是因为我习惯于在sql中开发,是的,这是合适的,因为每
我有一个具有以下索引设置的设备集合:{"v":1,"key":{"sdk.id":1,"sdk.createdAt":1,"sdk.updatedAt":1,"deviceInfo.isTablet":1},"name":"sdk.id_1_sdk.createdAt_1_sdk.updatedAt_1_deviceInfo.isTablet_1","ns":"company.Device"}我的文档是这样的:{_id:ObjectId("something"),property:'abcd',sdk:[{id:'ab',createdAt:newDate(),updatedAt:ne
我正在重建LoversonFacebook使用Sinatra和Redis。我喜欢Redis,因为它没有长(12字节)BSONObjectIds我正在为每个用户存储一组Facebookuser_id。这些集合是requests_sent、requests_received和关系,它们都包含Facebook用户ID。我正在考虑切换到MongoDB,因为我想使用它的地理空间索引。如果我这样做,我想使用FB用户ID作为_id字段,因为我希望集合很小并且我希望JSON响应很小。但是,使用BSONObjectId是否比仅使用整数(fbuser_id)更好(对于MongoDB更有效)?
我是mongoDB的新手。现在我正在开发一个个人项目。我正在使用MongoVUE,在开发过程中我使用MongoVUE创建索引。但是,我正在处理的数据库当然是为了开发。我如何将索引复制到生产数据库?当我传递到生产环境时,集合将为空,我如何使用空集合创建这些索引?脚本?程序来做这个?你推荐什么?谢谢! 最佳答案 当您使用MongoVUE创建索引时它会在底部的LearnShell面板中向您显示实际的MongoDBshell命令。只需记录这些命令,并在准备好部署时直接通过生产服务器上的shell运行它们。