【问题标题】:mongo query $near always 0 resultsmongo 查询 $near 总是 0 结果
【发布时间】:2020-07-03 05:24:49
【问题描述】:

我的搜索职位与数据库中的职位相同。结果是一个空数组。我希望从数据库中获取一个元素,因为两个位置之间的距离为 0。

Mongo Doku $near

查询以找到所有最近的

Request.find({
            address: {
                location: {
                    $near: {
                        $geometry: {
                            type: 'Point' ,
                            coordinates: [8.4821159,49.4705199],
                        },
                        $maxDistance: 10000,
                        $minDistance: 0,
                    },
                },
            },
        })

猫鼬模型

编辑(添加):this.request.index({'address.location': '2dsphere'});

  import mongoose from 'mongoose';

const ObjectId = mongoose.Schema.Types.ObjectId;
import {RequestMiddleware} from './RequestMiddleware';

class Request extends mongoose.Schema {
    public request: mongoose.Schema;

    constructor() {
        const RequestSchema = {
            title: {
                type: String,
                required: true,
            },
            description: {
                type: String,
                required: true,
            },
            category: {
                type: ObjectId,
                ref: 'Category',
                required: true,
            },
            created_by: {
                type: ObjectId,
                ref: 'User',
                required: true,
            },
            address: {
                location: {
                    type: {
                        type: String,
                        enum: ['Point'],
                        default: 'Point',
                        required: true,
                    },
                    coordinates: {
                        type: [Number],
                        default: [0, 0],
                        required: true,
                    },
                },
                plz: {
                    type: String,
                    required: false,
                },
                city: {
                    type: String,
                    required: false,
                },
                street: {
                    type: String,
                    required: false,
                },
                street_nr: {
                    type: String,
                    required: false,
                },
            },
            time_end: {
                type: Date,
                required: false,
            },
            confirmed_helper: {
                type: ObjectId,
                ref: 'User',
            },
            helper: [{
                helperId: {
                    type: ObjectId,
                    ref: 'User',
                },
                offer_text: {
                    type: String,
                },
            }],
        };
        const request = super(RequestSchema, {
            timestamps: {
                createdAt: 'created_at',
                updatedAt: 'updated_at',
            },
        });
        this.request = request;
        this.request.index({'address.location': '2dsphere'});
        this.request.plugin(RequestMiddleware);

        return this.request;
    }
}

export default mongoose.model('Request', new Request());

数据库:

【问题讨论】:

    标签: javascript mongodb typescript mongoose


    【解决方案1】:

    你需要两件事:

    2dspere index(可能你已经有了):

    db.col.createIndex( { "address.location" : "2dsphere" } )
    

    并修改您的查询,使其使用点表示法而不是嵌套对象:

    let result = await Request.find({
            'address.location': {
                $near: {
                    $geometry: {
                        type: 'Point',
                        coordinates: [8.4821159, 49.4705199]
                    },
                    $maxDistance: 10000,
                    $minDistance: 0
                }
            }
        });
    

    【讨论】:

    • 发布了完整的模型并在 'address.location' 是 sessasary 之后添加了 createIndex。工作!!!谢谢”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    相关资源
    最近更新 更多