匹配Mongoose不同记录中的2个字段

时间:2016-07-28 10:37:54

标签: javascript node.js mongodb mongoose

早安

我正在尝试匹配数据集上的某些字段。数据集包含以下记录:

{
    "token" : "17e0d95f2e2112443cfb09970ae9140e",
    "answers" : {
        "Yourname" : "Marco",
        "youremail" : "marco@me.nl",
        "recemail" : "sonja@me.nl"
    }
},


{
    "token" : "cf5ae65b05249dc6b2a0c99c4cf9688e",
    "answers" : {
        "yourname" : "Sonja",
        "youremail" : "sonja@me.nl",
        "recemail" : "marco@me.nl"
    }
}

在这种情况下,它应与两者匹配,因为recemail(收件人电子邮件)与其他人的电子邮件地址相匹配。反之亦然。 我想要找到的是如何找到这两个记录(在更大的数据集中有更多这些匹配)。

所以,Marco的recemail应该找到Sonja的youremail,这两个匹配应该可以保存到另一个集合中,但这不是重要的部分。

希望有人可以帮我解决此问题 谢谢!

1 个答案:

答案 0 :(得分:1)

以下代码将返回一个2项数组的数组。每个2项阵列都由发件人电子邮件和收件人电子邮件组成。每对只出现一次。换句话说,您将获得["marco@me.nl", "sonja@me.nl"]但不会["sonja@me.nl", "marco@me.nl"]



var list = [{
    "token" : "17e0d95f2e2112443cfb09970ae9140e",
    "answers" : {
        "Yourname" : "Marco",
        "youremail": "marco@me.nl",
        "recemail" : "sonja@me.nl" }
  }, {
    "token" : "cf5ae65b05249dc6b2a0c99c4cf9688e",
    "answers" : {
        "yourname" : "Sonja",
        "youremail": "sonja@me.nl",
        "recemail" : "marco@me.nl" }
  }, {
    "token" : "fe2c2740e083dfe02cc7e96520a0e079",
    "answers" : {
        "yourname" : "Joe",
        "youremail": "joe@foo.com",
        "recemail" : "mike@bar.com" }
  }
];

var res = [], sz = list.length;

list.forEach(function(obj, pos) {
  for(var i = pos + 1; i < sz; i++) {
    if(
      list[i].answers.youremail == obj.answers.recemail &&
      list[i].answers.recemail == obj.answers.youremail
    ) {
      res.push([ obj.answers.youremail, obj.answers.recemail ]);
    }
  }
});
console.log(res);
&#13;
&#13;
&#13;