mongodb中⾮常好⽤的Aggregate⼊门教程neversaydie
前⾔dnp
aggregate 翻译过来是聚合的意思,但是在实际的使⽤的它的体验特别像linux中的管道,每个管道处理完之后再把结果交个下⼀个管道,你的数据就像⽔流,最后通过各个管道你能够得到你想要的数据
我们⼀般⽤Aggregate做什么
聚合平均数等数据处理 group sum
地理位置信息 $geoNear
基本上mongodb的所有查询操作我们都可以⽤ aggregate实现,⽤好这个基本上是万⾦油了
在这⾥我主要想记录⼀下mongodb在地理位置信息查询中使⽤到的技术,不仅可以查询到距离还可以按照距离排序$geoNear 地理位置信息查询
⾸先我们的坐标数据在库⾥⾯怎么存, 类型为 Array ,记得加 2d 索引,当然还有3d 索引,⽬前还没有⽤到
const storeschema = new mongoo.Schema({
name: { type: String, required: true },
point: { type: Array, required: true }, // [lon, lat]
});
storeschema.index({ point: '2d' });
del('store', storechema);
然后按照就是地理查询代码了
$geoNear: {
spherical: true, // spherical 是否按照球形状来求距离
distanceMultiplier: 6378137,
maxDistance: 10000,迈克尔菲尔普斯
near: [ lon1, lat1 ],colgate
distanceField: 'dist',
key: 'point',
query: {
}
},
},
//distanceMultiplier 这个参数是⽤于确定你返回的距离是什么单位 6378137 的单位是m
//maxDistance 查询的最⼤距离
// near 中⼼点坐标
/
/ distanceField 距离放在哪个属性
// key 保存坐标数据的地⽅
// query 你的过滤条件
有⼀个很有意思的地⽅是 match 所以在这⾥有⼀个 query属性来补齐这种遗憾
但是你可以在后⾯使⽤$match 对查到的所有地理位置信息数据做再⼀次的筛选
$lookup mongodb中的联表查询
$lookup 是在⽐较新的mongodb版本中才能使⽤的属性,当然这个属性也是⽤于 aggregate中的,它补齐了之前mongodb中⽆法联表的遗憾
看代码
del.MemberInfo.aggregate([
西班牙英文{
$match: { store: new ObjectId(store) }
},
{
$lookup: {
from: 'urs',
localField: 'ur',
foreignField: '_id',
hakkoas: 'ur'
}
},
{
$replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: [ '$ur', 0 ] }, '$$ROOT' ] } }belt怎么读
},
{
$match: { 'certification.name': { $regex: arch } }
},
{
$project: { _id: 1 }
}
戛纳电影节海报
]);
memberinfo 与 ur 表在这⾥我想要获取 memberinfo localField: 'ur' 为外键对应 ur表foreignField: '_id' _id字段他的额外属性...说⽩了我的会员表⾥⾯只存了⽤户的id 现在我想要拿到⽤户的其它信息...
附上链接吧
写在最后
当然说他是查询万⾦油他当然⽀持定义数据的输出 limit $sort 等常规操作
www 775 com总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。