Javascript 从用户ID或基于IP的Mongoose查询
我只有一个用户ID和这个查询:Javascript 从用户ID或基于IP的Mongoose查询,javascript,node.js,mongodb,mongoose,nosql,Javascript,Node.js,Mongodb,Mongoose,Nosql,我只有一个用户ID和这个查询: return gamelog.find({userid: userid).then(function (response) { return response; }); 使用以下型号: new Schema({ userid : String, ip: String, }); 结果至少会给我一个或多个IP。然后我需要查询这些IP,以检查是否有其他用户使用过该IP地址 我如何修改这个查
return gamelog.find({userid: userid).then(function (response) {
return response;
});
使用以下型号:
new Schema({
userid : String,
ip: String,
});
结果至少会给我一个或多个IP。然后我需要查询这些IP,以检查是否有其他用户使用过该IP地址
我如何修改这个查询,以便从其中一个IP获取具有该用户ID或任何用户ID的所有IP
理想的结果是生成所有userid的IP地址,以及所有其他用户都在userid所在的IP上
编辑:
样本文件:
{
time: "1507127113173",
ip:"::1",
others: 0,
url:"/api/gameapi?action=getweapon",
userid:"59d4ef435048380ff4abd683"
}
{
time: "1507127113173",
ip:"::1",
others: 0,
url:"/api/gameapi?action=getweapon",
userid:"59d4ef43504833333333380ff4abd683"
}
你可以试试下面的聚合 下面的查询将过滤所有文档中的“userid”,后跟
$group
以获取“IP”的集合,并$lookup
加入以使所有用户共享与查询用户相同的IP
$unwind
其他用户的文档和其他用户id上的$group
并收集IP,然后是最终组以获取用户id和IP的集合
db.gamelog.aggregate([
{
"$match": {
"userid": userId
}
},
{
"$group": {
"_id": null,
"ips": {
"$push": "$ip"
}
}
},
{
"$lookup": {
"from": "gamelog",
"localField": "ips",
"foreignField": "ip",
"as": "otherusers"
}
},
{
"$unwind": "$otherusers"
},
{
"$match": {
"otherusers.userid": {
"$ne": userId
}
}
},
{
"$group": {
"_id": "$otherusers.userid",
"ips": {
"$first": "$ips"
},
"otheruserips": {
"$push": "$otherusers.ip"
}
}
},
{
"$group": {
"_id": null,
"ips": {
"$first": "$ips"
},
"otherusers": {
"$push": {
"userid": "$_id",
"ips": "$otheruserips"
}
}
}
}
])
变量ipuser将持有什么?原因,它当前未定义。抱歉,它应该是ipuserf。更新的答案。是的,我试过了。但是日志中的每一行都会得到一个users属性。我如何修改您的答案以只提供该用户和使用它的用户的地址?类似于ips:array of ips,other users:array containing user和用户匹配的IP(必须与userid相同的IP)的响应将尽快确认。目前我得到一个空的输出。