簡體   English   中英

mongo 查詢 $near 總是 0 結果

[英]mongo query $near always 0 results

我的搜索位置與數據庫中的位置相同。 結果是一個空數組。 我希望從數據庫中獲取一個元素,因為兩個位置之間的距離為 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());

數據庫:

數據庫

你需要兩件事:

2dspere 索引(可能你已經有了):

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
            }
        }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM