3

回顾我发现MongoDB: get documents by tags的一些教程,似乎大多数标签都是作为项目列表创建的。在我的架构中,我想要动态标签(键值对),因此集合中的每个项目都有一个标签字段,如下所示:

{"tags" : {"key1" : "value1", "key2", "value2"}}

但是我想对标签字段内的键进行索引。AFAIK,这是不可能的(即使使用多键索引),因为键可以是任意的?

我是否需要将架构迁移到如下所示:

{"tags" : [{"key1" : "value1"}, {"key2" : "value2"}]}

如果是这样,我的索引将如下所示:

db.foo.ensureIndex({"tags" : 1})

正如这里所建议的:

http://www.mongodb.org/display/DOCS/Using+Multikeys+to+Simulate+a+Large+Number+of+Indexes

4

1 回答 1

2

是的,您可以将一组子文档作为标签进行索引,但您始终需要查询完整的子文档。如上所述创建索引

db.foo.ensureIndex({'tags': 1})

并查询:

db.foo.find('tags': {'key1': 'value1'}) 

这将使用索引并返回在其标签数组中具有该特定子文档的所有文档。

于 2012-08-27T19:03:27.070 回答