我是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是男性!
答案 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
的字段中。