gpt4 book ai didi

mongodb - 使用文档中存储的值查询 $near

转载 作者:可可西里 更新时间:2023-11-01 10:42:54 26 4
gpt4 key购买 nike

按我要返回的文档中的属性进行过滤时遇到问题...甚至不知道如何表达这个问题。例如:

我正在开发一个系统,如果附近有工作弹出,用户会收到警报。该用户定义如下:

var user = new Schema({
location: {type:[Number], index: '2dsphere', required:true},
maxDistance: {type:Number, required:true},
});

还有工作:

var job = new Schema({
location: {type:[Number], index: '2dsphere', required:true},
});

创建工作后,如何找到合适的用户?我需要用户的 .maxDistance 属性...

var job = //new job, save, etc.

users.find({
location: {$near: job.location, $maxDistance: ????user.maxDistance??? }
}, function(err, users){});

有没有办法做到这一点?谢谢!

最佳答案

可以使用聚合框架并且它是自己的$geoNear将查询结果的“距离”“转换”到文档本身的管道运算符:

users.aggregate(
[
{ "$geoNear": {
"near": job.location,
"spherical": true,
"distanceField": "distance"
}},
{ "$redact": {
"$cond": {
"if": { "$lt": [ "$distance", "$maxDistance" ] },
"then": "$$KEEP",
"else": "$$PRUNE"
}
}}
],
function(err,results) {
// deal with response
}
);

因此 $geoNear 本质上执行 $near 查询,但也返回包含“distance”的“强制”字段,指定为您想要从“distanceField”参数。

然后 $redact阶段会查看结果并将那里返回的值与对象中已存在的值进行“逻辑比较”,以查看它是否“小于”值,从而符合您正在搜索的条件。

这是一个基本的“两阶段”聚合管道,首先“匹配”然后根据您的条件“过滤”结果。

关于mongodb - 使用文档中存储的值查询 $near,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32456648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com