使用Java在mongodb中使用多个字段创建索引
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Java在mongodb中使用多个字段创建索引,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2202字,纯文字阅读大概需要4分钟。
内容图文
![使用Java在mongodb中使用多个字段创建索引](/upload/InfoBanner/zyjiaocheng/885/d153cee4602d457db3787f23a187e7d1.jpg)
我是MongoDB的新手.默认情况下,mongodb中的集合在_id字段上有索引.我需要使用Java在另外2个字段上创建索引.
DBObject indexOptions = new BasicDBObject();
indexOptions.put(field_1, 1);
indexOptions.put(field_2, -1);
collection.createIndex(indexOptions )
当我使用db.collection_name.getIndexes()在mongodb中查询时
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "schema.collection_name"
},
{
"v" : 1,
"key" : {
"field_1" : 1,
"field_2" : -1
},
"name" : "field_1_1_field_2_-1",
"ns" : "schema.collection_name"
}
]
我不确定以上是否正确.
有人可以确认吗?如果不正确,我该如何纠正?
添加到上面,为了检索,我正在做这样的事情:
DBObject subscriberIdObj = new BasicDBObject( field3, value3 );
DBObject subscriberIdIsNullObj = new BasicDBObject( field3, null );
BasicDBList firstOrValues = new BasicDBList();
firstOrValues.add( subscriberIdObj );
firstOrValues.add( subscriberIdIsNullObj );
DBObject firstOr = new BasicDBObject( "$or", firstOrValues );
DBObject batchIdObj = new BasicDBObject( field1, value1 );
DBObject fileNameObj = new BasicDBObject( field2, value2 );
BasicDBList secondOrValues = new BasicDBList();
secondOrValues.add( batchIdObj );
secondOrValues.add( fileNameObj );
DBObject secondOr = new BasicDBObject( "$or", secondOrValues );
BasicDBList andValues = new BasicDBList();
andValues.add( firstOr );
andValues.add( secondOr );
DBObject query = new BasicDBObject( "$and", andValues );
DBCursor cursor = mongoDatastore.getDB().getCollection(collection_name).find(query);
现在,为了像上面那样快速检索,我应该分别在field1,field2和field3上创建索引吗?还是所有3个字段的复合索引?
解决方法:
这是正确的,称为复合索引.您已经在两个字段上创建了索引:field_1(升序)和field_2(降序).因此,例如,如果您将按field_1升序和field_2降序排序或按field_1降序和field_2升序排序,则MongoDb将为此索引field_1_1_field_2_-1使用它.
但是,上述索引不能支持先按field_1值升序,然后按field_2值升序排序.同样,如果您仅在field_2上搜索或排序,它将不会使用该索引.在这种情况下,您可以为field_1和field_2创建单独的索引.
要检查您的查询是否使用索引,请尝试使用explain()并查看使用了哪个游标.例如,您可以尝试这样的查询:
db.your_collection.find({ "field_1" : "something" }).explain()
如果您看到使用的游标是BtreeCursor,则查询使用索引,如果使用BasicCursor,则不使用索引.
有关更多信息,请参考this article.
内容总结
以上是互联网集市为您收集整理的使用Java在mongodb中使用多个字段创建索引全部内容,希望文章能够帮你解决使用Java在mongodb中使用多个字段创建索引所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。