小编Aks*_*hta的帖子

MongoDB $geoNear 聚合管道(使用查询选项和使用 $match 管道操作)给出不同的结果

我使用 $geoNear 作为聚合框架的第一步。我需要根据“标签”字段过滤掉结果,它工作正常,但我看到有两种方法可以给出不同的结果。

示例 MongoDB 文档

    {
      “位置”: [
        40.80143,
        -73.96095
      ],
      “标签”:“披萨”
    }

我已将 2dsphere 索引添加到“位置”键

    db.restaurants.createIndex( { '位置' : "2dsphere" } )

查询 1

使用 $match 聚合管道操作根据“标签”键过滤结果
    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

在 $geoNear 聚合操作中使用查询根据“标签”键过滤结果
    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 …

geospatial mongodb 2dsphere

7
推荐指数
1
解决办法
9879
查看次数

Spring 中的异步事件需要大量时间来执行(轮到它了)

我有一个应用程序,每当对端点进行 REST 调用时,我都需要在其中触发电子邮件。设计是每当调用 REST 调用时,我将数据保存在数据库中,发出一个异步事件并返回。

我的问题是,由于大量请求不断涌现,发出的异步事件在很长一段时间内都没有机会。有时,当服务器启动数周时,延迟会不断增加。

场景

  1. 服务器端点被调用
  2. 服务器将数据保存到 db,发出一个 Spring 异步事件
  3. 从端点返回

由于有时调用侦听器很晚,因此调用 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 …

java spring asynchronous spring-mvc

3
推荐指数
1
解决办法
2568
查看次数

更改 MySQL 数据库的字符集和排序规则时,现有索引是否会受到影响

  1. 我们有一个数据库,其中表和列的默认字符集设置为utf8编码
  2. 但是使用utf8字符集编码,我们无法保存表情符号
  3. 为了支持保存表情符号,a) 我们必须将表和列的字符集更改为utf8mb4 b) 我们必须将表和列的排序规则更改为 utf8mb4_unicode_ci c) 更新我们的 JDBC 驱动程序,使其支持 unicode 编码

通过上述更改,我们可以将表情符号保存在我们的列中。

问题: 1)我是否需要删除现有索引(varchar 列)并重新创建索引,如之前使用 utf8 每个字符占用 3 个字节,现在使用 utf8mb4 编码它将占用 4 个字节?

mysql database collation character-encoding character-set

1
推荐指数
1
解决办法
1514
查看次数