-1

我目前正在为一个用例评估不同数据库的效率。在 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 对我的用例的执行情况或优化的样子。

4

1 回答 1

2

MongoDB 有文档解释如何通过点符号在嵌入式文档上创建索引:

点符号(触及对象)

> 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 } );

至于性能特征......只需使用您的数据集进行测试。

于 2012-08-29T17:30:15.537 回答