我的 mongoDB 数据库中有 2 个集合 - users 和 connections。
每个 connection 都有字段 user,其中包含存储在 users 集合中的 user 的 _id .
我需要找到每个用户的连接总数,如果用户没有连接,它应该显示 0 作为他的总数。
同时查找每个用户的 date 字段不等于 '' 的连接数。
我写了这段代码,它返回每个用户的连接总数,但只针对至少有一个连接的用户,没有连接的用户根本不会出现......
Connection.aggregate(
[
{
$group: {
_id: "$user",
total: { $sum: 1 },
withDate: { $sum: { $cond: { if: { $ne: ["$date", ""] }, then: 1, else: 0 } } }
}
},
{
$lookup: {
from: "users",
localField: "_id",
foreignField: "_id",
as: "users"
}
},
{
$unwind: "$users"
},
{
$project: {
Email: "$users.local.email",
"Last Edit": { $dateToString: { format: "%Y-%m-%d", date: "$users.local.lastConnectionEdit" } },
"Total Connections": "$total",
"Connections With Date": "$withDate"
}
}
],
function(err, dashboardData) {
if (err) {
console.log(err);
res.status(500).end({ error: "Error fetching stats from database" });
} else {
let csv = json2csv(dashboardData);
res.attachment("stats.csv");
res.status(200).send(csv);
}
}
);
连接架构:
active:Boolean,
info: {
name: String,
profileImg: String,
bio: String
},
connURL:String,
handle:String,
notes: String,
date: String,
value: {
type: Number,
min: 0,
max: 5
},
tags: [String],
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
用户模式:
local: {
email: String,
password: String,
admin: Boolean,
snoozeAmount: Number,
snoozeInterval: String,
emailIntervalWeeks: Number,
emailIntervalDay: Number,
isVerified: { type: Boolean, default: false },
verifyToken: String,
passwordResetToken: String,
lastConnectionEdit: Date
}
最佳答案
你可以试试下面的聚合
User.aggregate([
{ "$lookup": {
"from": "connections",
"localField": "_id",
"foreignField": "user",
"as": "connections"
}},
{ "$addFields": {
"total": { "$size": "$connections" },
"withDate": {
"$reduce": {
"input": "$connections",
"initialValue": 0,
"in": {
"$add": [
"$$value",
{ "$sum": {
"$cond": { "if": { "$ne": [ "$$this.date", "" ] }, "then": 1, "else": 0 }
}}
]
}
}
}
}}
])
关于javascript - Mongoose - 分组、计数并在集合中找不到任何内容时返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51690415/
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article
我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
尝试在我的RoR应用程序中实现计数器缓存列时出现错误Unknownkey(s):counter_cache。我在这个问题中实现了模型关联:Modelassociationquestion这是我的迁移:classAddVideoVotesCountToVideos0Video.reset_column_informationVideo.find(:all).eachdo|p|p.update_attributes:videos_votes_count,p.video_votes.lengthendenddefself.downremove_column:videos,:video_vot
我正在尝试按0-9和a-z的顺序创建数字和字母列表。我有一组值value_array=['0','1','2','3','4','5','6','7','8','9','a','b','光盘','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','','u','v','w','x','y','z']和一个组合列表的数组,按顺序,这些数字可以产生x个字符,比方说三个list_array=[]和一个当前字母和数字组合的数组(在将它插入列表数组之前我会把它变成一个字符串,]current_combo['0','0','0']
我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions