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