簡體   English   中英

mongo進行$ near查找時出現范圍錯誤

[英]Range Error with mongo doing a $near lookup

mongo在$near查找中遇到奇怪的錯誤。 DB瘋了,吐出了我們的量程錯誤。

下面的代碼片段可以正常工作

mongoose.models.Users.findOne({_id: req.user.id}, function(err, loggedin) {
    var location = JSON.parse(JSON.stringify(loggedin.location));
    mongoose.models.Users.find({
      location: { $near: { $geometry: location } },
    }, (err, users) => {

    })
})

但是,如果我搞錯了JSON.parse(JSON.stringify())克隆它嚇壞了

mongoose.models.Users.findOne({_id: req.user.id}, function(err, loggedin) {
    var location = loggedin.location;
    mongoose.models.Users.find({
      location: { $near: { $geometry: location } },
    }, (err, users) => {

    })
})

如您所見,使用貓鼬,但這不會影響此查詢。 我必須看不到某些額外的location ,但找不到。

如果我在數據庫查詢后立即console.log loggedin.location我得到這個:

location: { type: 'Point', coordinates: [ -118.3141928, 34.0806176 ] },

我還設置了一個調試斷點,並得到了相同的結果

另一個值得注意的事實是,如果我使用lean()執行findOne查詢,因此它僅返回純JSON,則第二個查詢可以完美地工作。 我想知道訪問geoJSON屬性時是否有貓鼬調用的吸氣劑。

我的貓鼬模式設置如下

const UserSchema = new Schema({
  location: {
    type: { type: String },
    coordinates: [],
  },
})
userSchema.index({ location: '2dsphere' });

嘗試在不進行額外分配的情況下嘗試執行此操作,以及像這樣簡單地運行查詢

location: { $near: { $geometry: loggedin.location } },

但是得到了同樣的錯誤。

另一個有趣的事實是,如果我使用mongoose.models.Users.collection進入本機客戶端並執行查詢,那么我根本不會收到錯誤。

具有mongo shell輸出和本機查詢的示例要點

試試看這段代碼

 $geoNear: {
            near: {type: "Point", coordinates:[parseFloat(req.query.latitude), parseFloat(req.query.longitude )]},
            distanceField: "dist.calculated",
            maxDistance:10000,
            spherical: true
        }

暫無
暫無

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

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