Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongoDB聚合数组长度_Javascript_Node.js_Mongodb_Database - Fatal编程技术网

Javascript MongoDB聚合数组长度

Javascript MongoDB聚合数组长度,javascript,node.js,mongodb,database,Javascript,Node.js,Mongodb,Database,我正在开发一个简单的dev meet designer平台,并试图创建一个更好的人气排名算法 我现有的代码是: project_collection.aggregate([ { "$project": { "score": { "$divide": [ "$views", { "$divide": [ { "$subtrac

我正在开发一个简单的dev meet designer平台,并试图创建一个更好的人气排名算法

我现有的代码是:

project_collection.aggregate([
        { "$project": { 
            "score": {
              "$divide": [
                "$views",
                { "$divide": [
                    { "$subtract": [ 
                        new Date(), 
                        "$created_at" 
                    ]},
                    10*60*30
                ]}
            ]},
            "created_at": 1,
            "views": 1
        }}
      ], function(error, results) {
          // do stuff
      });
我想切换代码以计算文档中的
likers
数组,并使用该值代替
$views
。非常感谢您的帮助

下面是一个示例文档结构:

{
    "_id" : ObjectId("53d95d33a3ca780d096e5e7e"),
    "name" : "Foo",
    "tagline" : "This is a test project.",
    "description" : "Foo bar.",
    "tags" : [ 
        "front end"
    ],
    "owner" : "Noah",
    "views" : 2,
    "activity" : [ 
        {
            "options" : {
                "type" : "started",
                "owner" : "Noah"
            }
        }, 
        {
            "options" : {
                "type" : "application",
                "applicant" : "John"
            }
        }
    ],
    "closed" : false,
    "finished" : false,
    "applicants" : [ "John" ],
    "partners" : [],
    "chat" : [],
    "discussion" : [],
    "url" : "",
    "fireQuene" : [],
    "likers" : [ "John", "Noah" ],
    "created_at" : ISODate("2014-07-30T21:01:39.421Z")
}
MongoDB 2.6引入了一个返回数组长度的操作符,以获取您的问题所要求的“数组长度”。在您的算法中用以代替“$views”,这将是:

project_collection.aggregate([
        { "$project": { 
            "score": {
              "$divide": [
                { "$size": "$likers" },
                { "$divide": [
                    { "$subtract": [ 
                        new Date(), 
                        "$created_at" 
                    ]},
                    10*60*30
                ]}
            ]},
            "created_at": 1,
            "views": 1
        }}
      ], function(error, results) {
          // do stuff
      });
如果早期版本没有此功能,则需要在阵列上使用并获取计数。您可以进入以下阶段:


因此,
$size
可以帮助您完成所做的工作,但通常情况下,最好尝试在文档中记录您的喜好,并相应地进行更新。

您应该在问题中发布文档结构,以使其更清晰。如果我使用上面的代码和示例文档,结果的JSON将是:
[{“\u id”:ObjectId(“53d95d33a3a3ca780d096e5e7e”),“views”:3,“created_at”:ISODate(“2014-07-30T21:01:39.421Z”),“score”:0.000125372790764868}
,@ChristianP。
project_collection.aggregate([
        { "$unwind": "$likers" },
        { "$group": {
            "_id": "$_id",
            "created_at": { "$first": "$created_at" },
            "likers": { "$push": "$likers" },
            "count": { "$sum": 1 }
        }},
        { "$project": {
            "score": {
              "$divide": [
                "$count",
                { "$divide": [
                    { "$subtract": [ 
                        new Date(), 
                        "$created_at" 
                    ]},
                    10*60*30
                ]}
            ]},
            "created_at": 1,
            "views": 1
        }}
      ], function(error, results) {
          // do stuff
      });