MongoDB的更好替代方法db.collection.group()

时间:2015-12-13 21:08:40

标签: mongodb

我希望将一组文档分组,然后将它们格式化为我可以动态查询的内容,然后查询生成的集合。我已经能够使用db.collection.group()对集合进行分组并对其进行成功格式化,但是在分片方面存在一些限制,这会阻止我在生产中使用它。

以下代码:

var reduceFunction = function(current, result){
  var provider = current.provider;
  var collection = current.collection || provider;
  result[provider] = result[provider] || {};

  result[provider][collection] = result[provider][collection] || {};

  result[provider][collection] = current.attributes;
}


var result = db.identity.group( {
   key: { cookie: 1 },
   cond: { organizationId: organization },
   reduce: reduceFunction,
   initial: {}
} );

以下是输入文档的示例:

{
    "_id" : ObjectId("566c92712ae892aeb5278467"),
    "provider" : "myProvider",
    "collection": "myCollection",
    "ip" : 111.111.111.111,
    "cookie" : "12381902348asdf",
    "updated" : ISODate("2015-12-12T21:32:33.824Z"),
    "attributes" : {
        company: "My Company"
    }
}

这是我想要的输出(按cookie分组的多个输入文档)

{
    "cookie" : "12381902348asdf",
    "myProvider": {
      "myCollection": {
        "company": "myCompany"
      }
    },
    "myOtherProvider": {
      "myOtherCollection": {
        "company": "myCompany"
      }
    }
}

这样我可以使用类似

的方式进行查询
collection.identity.find({"myProvider.myCollection.company": {$regex: /my/}})

这使我可以拥有多个提供者/集合/字段分组的条件,而不会在字段名称中出现冲突。

0 个答案:

没有答案