书籍标签与mongodb(多对多)实现

书籍标签与mongodb(多对多)实现,mongodb,pymongo,Mongodb,Pymongo,我试图用python构建一个简单的应用程序,在这里我有与标记关联的标记 鉴于以下数据: 书籍: 我(使用pymongo)将如何找到: 所有被标记为“小说”的书 系统中的所有唯一标记 1.按标签查找所有书籍: 如果为字段编制索引,则速度会更快 db.books.ensureIndex({tags: 1}) 2.查找所有唯一的标记 您可以使用map reduce var map = function() { this.tags.forEach(function(t) { emit(t,

我试图用python构建一个简单的应用程序,在这里我有与标记关联的标记

鉴于以下数据:

书籍:

我(使用pymongo)将如何找到:

  • 所有被标记为“小说”的书
  • 系统中的所有唯一标记
  • 1.按标签查找所有书籍: 如果为字段编制索引,则速度会更快

    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,它们应该可以立即在MongoShell中工作。我让您阅读pymongo文档并翻译代码片段。

    为什么要使用mapreduce?为什么不使用db.books.distinct(“标记”)?
    distinct
    如果标记太多(超过文档限制),将失败。超过150万个标记?
    db.books.ensureIndex({tags: 1})
    
    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'});