如何使用mongodb中的查找对单个集合的文档执行相等匹配?

时间:2018-04-11 11:09:29

标签: mongodb

我是MongoDB的新手,我正在尝试进行相等匹配,但仍然没有这样做。我有一个“用户”集合,它有以下数据:

{
  uid:"1230"
  age:20
  Name:"Alex"
  gender:"male"
  interestedIn:"female"
}

{
  uid:"1231"
  age:23
  Name:"Neil"
  gender:"male"
  interestedIn:"male"
}

{
  uid:"1232"
  age:20
  Name:"Amy"
  gender:"female"
  interestedIn:"male"
}

我想要的是找到“性别”等于当前用户的“interestIn”的记录,反之亦然。即,当我以“Alex”用户身份访问时,查询应该仅向我提供“Amy”的记录(因为Amy的性别值等于Alex的“interestIn”值)而不是Neil的记录。和

当我以“Neil”用户身份访问时,不会返回任何数据,因为没有任何男性用户以及对男性感兴趣!

我尝试使用$ lookup但它根本不工作。我正在努力使用$ cond运算符来解决这个问题。这是我的代码:

//我也在使用地理空间函数(通过对坐标进行硬编码),但这里没有问题,也没有返回任何内容。

db.users.aggregate([{
"$geoNear": {
  "near": {
    type: "Point",
    coordinates: [31.9686, 99.90]
  },
  "spherical": true,
  "distanceField": "distance",
  "maxDistance": 500,
  "query": {
    uid: {
      $ne: "1230"
    },
    age: {
      $gt: 18,
      $lt: 25
    },
  {
    $lookup:
    {
      from: "users",
      localField: "gender",
      foreignField: "interestedIn",
      as: "gender_docs"
    }
  },
  limit: 5
}  
},
   {
        "$project": {
          location: 0
        }
      }
    ]).pretty()

有人可以告诉我该如何正确地做到这一点?

//当前用户为Alex时的预期输出

 {
  uid:"1232"
  age:20
  Name:"Amy"
  gender:"female"
  interestedIn:"male"
}

当前用户为Neil时我的预期输出应该是空白的,因为没有任何其他记录的性别是男性而且interestIn是男性!

1 个答案:

答案 0 :(得分:1)

您不需要聚合框架和$lookup。我希望您拥有应用中当前用户的属性(例如interestedIn)。

您的问题的简单查询将是:

db.users.find({
    "gender": currentUserInterestedIn, 
    "_id": { "$ne": currentUserID },
    "location": "$near": {
        "type": "Point",
        "coordinates": [currentUserLat, currentUserLong],
        "$maxDistance": 500    
    },
}) 

currentUserInterestedIn应该是当前用户兴趣的实际值,即"male""female"

这假设用户位置存储在名为location的字段中。