我使用 $geoNear 作为聚合框架的第一步。我需要根据“标签”字段过滤掉结果,它工作正常,但我看到有两种方法可以给出不同的结果。
示例 MongoDB 文档
{
“位置”: [
40.80143,
-73.96095
],
“标签”:“披萨”
}
我已将 2dsphere 索引添加到“位置”键
db.restaurants.createIndex( { '位置' : "2dsphere" } )
查询 1
db.restaurants.aggregate(
[
{
“$geoNear”:{
“附近”:{类型:“点”,坐标:[55.8284,-4.207]},
“限制”:100,
“最大距离”:10*1000,
"distanceField": "dist.calculated",
"includeLocs": "dist.location",
“距离乘数”:1/1000,
“球形”:真实
}
},{
"$match":{"tag":"pizza"}
},
{
"$group":{"_id":null,"totalDocs":{"$sum":1}}
}
]
);
查询 2
db.restaurants.aggregate(
[
{
“$geoNear”:{
“查询”:{“标签”:“披萨”}
“附近”:{类型:“点”,坐标:[55.8284,-4.207]},
“限制”:100,
“最大距离”:10*1000,
"distanceField": "dist.calculated",
"includeLocs": "dist.location",
“距离乘数”:1/1000,
“球形”:真实
}
},
{
"$group":{"_id":null,"totalDocs":{"$sum":1}}
}
]
);
分组选项只是获取两个查询返回的文档数。
两个查询返回的 totalDocs …
我有一个应用程序,每当对端点进行 REST 调用时,我都需要在其中触发电子邮件。设计是每当调用 REST 调用时,我将数据保存在数据库中,发出一个异步事件并返回。
我的问题是,由于大量请求不断涌现,发出的异步事件在很长一段时间内都没有机会。有时,当服务器启动数周时,延迟会不断增加。
场景
由于有时调用侦听器很晚,因此调用 2 会延迟。
public class DataController {
@Inject
ApplicationEventPublisher eventPublisher;
@RequestMapping(value = "data", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.NO_CONTENT)
public void addData(@RequestBody DataDTO data) {
dataService.addData(data);
eventPublisher.publishEvent(new DataRequest(new DataDTO());
}
}
public class DataRequest extends ApplicationEvent {
private DataDTO dataDTO;
public DataRequest(DataDTO dataDTO) {
super(dataDTO);
this.dataDTO = dataDTO;
}
}
@Component
public class DataListener {
@EventListener
@Async
private void dataListener(DataDTO dataDTO) {
// Send email
}
}
Run Code Online (Sandbox Code Playgroud)
由于它是一个 Async …
通过上述更改,我们可以将表情符号保存在我们的列中。
问题: 1)我是否需要删除现有索引(varchar 列)并重新创建索引,如之前使用 utf8 每个字符占用 3 个字节,现在使用 utf8mb4 编码它将占用 4 个字节?
2dsphere ×1
asynchronous ×1
collation ×1
database ×1
geospatial ×1
java ×1
mongodb ×1
mysql ×1
spring ×1
spring-mvc ×1