使用mongodb(多对多)实现预订标记

时间:2012-07-20 19:18:19

标签: mongodb pymongo

我试图在python中构建一个简单的应用程序,其中我有与标签关联的标签。

鉴于以下数据:

图书:

+-------------+--------------------------------+
|     id      |             tags               |
+-------------+--------------------------------+
|      1      |     [python, ruby, rails]      |
+-------------+--------------------------------+
|      2      |     [fiction, fantasy]         |
+-------------+--------------------------------+
|      3      |     [fiction, adventure]       |
+-------------+--------------------------------+

我如何(使用pymongo)找到:

  1. 所有标记为“fiction”的书籍
  2. 系统中的所有唯一标记

1 个答案:

答案 0 :(得分:3)

1。按标签查找所有书籍:

db.books.find({tags: 'ruby'})

如果您为该字段编制索引,这将会更快。

db.books.ensureIndex({tags: 1})

2。找到所有唯一标签

您可以使用map-reduce

var map = function() {
  this.tags.forEach(function(t) {
    emit(t, 1);
  })
};

var reduce = function(k, vals) {
  return {k, 1}
};

db.books.mapReduce(map, reduce, {out: 'temp_collection_name'});

所有示例都在javascript中,它们应该立即在mongo shell中运行。我留给你阅读pymongo文档并翻译片段。