Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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 从用户ID或基于IP的Mongoose查询_Javascript_Node.js_Mongodb_Mongoose_Nosql - Fatal编程技术网

Javascript 从用户ID或基于IP的Mongoose查询

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地址 我如何修改这个查

我只有一个用户ID和这个查询:

  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)的响应将尽快确认。目前我得到一个空的输出。