📅  最后修改于: 2023-12-03 15:04:44.591000             🧑  作者: Mango
Query.prototype.circle()
是 Mongoose 中的查询函数,它用于执行一个圆形地理空间查询。它将在指定的经度和纬度周围查找一定距离内的文档。
以下是 Query.prototype.circle()
的基本用法:
Model.find().where('location').within().circle({ center: [longitude, latitude], radius: distanceInRadians });
其中,location
是包含每个文档位置的字段。longitude
和 latitude
是查询的圆心坐标,distanceInRadians
是距离圆心的距离(以弧度为单位)。
该方法返回一个 Query
对象,您可以链式调用其他查询函数,在返回纪录时查看查询结果。
以下是包含所有查询选项的示例:
Model.find()
.where('location').within({ center: [longitude, latitude], radius: distanceInRadians, unique: true, spherical: true })
.where('field1', 'value1')
.where('field2').lt(value2)
.select('field3 field4')
.sort('-field5')
.skip(10)
.limit(5)
.exec((err, results) => {
// Do something with the results
});
在这个例子中,我们通过 within()
指定了圆形查询选项。 unique
选项将确保返回的结果不会包含重复的多边形, spherical
选项将在二维球面上运行查询,而不是三维球体上运行查询。
可以使用 where()
函数对其他字段进行查询。在此示例中,我们使用了 lt()
,它表示小于操作符。还可以使用其他类似的操作符,例如 gt()
,lte()
,gte()
等。
使用 select()
函数可以选择要返回的字段。在这个例子中,我们将返回 field3
和 field4
。
可以使用 sort()
函数按指定字段排序。在此示例中,我们将按 field5
的降序排序。
使用 skip()
和 limit()
函数可以控制返回结果的数量。在此示例中,我们跳过前10个结果并限制返回结果为5条。
最后,我们使用 exec()
函数执行查询并获取结果。在这个例子中,我们将结果传递给回调函数进行处理。
要使用 Query.prototype.circle()
函数,您首先需要确保 MongoDB 数据库的版本高于 2.4。您还需要在模型文件中定义一个 2dsphere
类型的索引,以便支持地理空间查询。索引的定义可以使用 Schema.index()
函数进行。
const ModelSchema = new Schema({
location: {
type: {
type: String,
enum: ['Point'],
required: true
},
coordinates: {
type: [Number],
required: true
}
}
});
ModelSchema.index({ location: '2dsphere' });
const Model = mongoose.model('Model', ModelSchema);
在这个例子中,我们定义了一个名为 location
的字段。这个字段包含一个 type
属性和一个 coordinates
属性。 type
属性必须是字符串 ”Point”, coordinates
属性是一个包含经度和纬度的数字数组。
使用 ModelSchema.index()
函数,我们定义了一个类型为 2dsphere
的 location
索引。这个索引将允许我们在 location
字段上执行地理空间查询。
在上述代码中,我们创建了一个使用 Query.prototype.circle()
的节点程序。此函数将根据指定的经纬度和距离查找给定位置周围的文档。您可以根据需要自定义查询选项,并使用其他查询函数进行进一步的筛选和排序。
希望这篇文章能帮助您了解如何在 Mongoose 中使用 Query.prototype.circle()
函数以执行圆形地理空间查询。