我目前正在评估用例的不同数据库的效率。在Mongodb中,想要存储大约100万个具有以下结构的对象。每个对象在foo数组中都有5到10个对象。
{
name:"my name",
foos:[
{
foo:"...",
bar:"..."
},
{
foo:"...",
bar:"..."
},
{
foo:"...",
bar:"..."
}
]
}
我经常需要搜索foos集合中包含具有特定属性的对象的对象,例如:
// mongo collection
[
{
name:'my name',
foos:[
{
foo:'one_foo',
bar:'a_bar'
},
{
foo:'two_foo',
bar:'b_bar'
}
]
},
{
name:'another name',
foos:[
{
foo:'another foo',
bar:'a_bar'
},
{
foo:'just another foo',
bar:'c_bar'
}
]
}
]
// search (pseudo code)
{ foos: {$elemMatch: {bar: 'c_bar'}} }
// returns
{
name:'another name',
foos:[
{
foo:'another foo',
bar:'a_bar'
},
{
foo:'just another foo',
bar:'c_bar'
}
]
}
这可以用mongo有效地完成吗?如何设置索引? 我不希望你为我评估性能,只是想一想mongo如何为我的用例执行或者优化如何。
答案 0 :(得分:2)
MongoDB有文档说明如何通过点表示法在嵌入式文档上创建索引:
Dot Notation (Reaching into Objects)
> db.blogposts.findOne()
{ title : "My First Post", author: "Jane",
comments : [{ by: "Abe", text: "First" },
{ by : "Ada", text : "Good post" } ]
}
> db.blogposts.find( { "comments.by" : "Ada" } )
> db.blogposts.ensureIndex( { "comments.by" : 1 } );
至于性能特征......只需使用您的数据集进行测试。