1

我正在开发用户可以上传数据的产品,并且数据的数据类型将在上传时由用户动态获取。我将数据存储在 mongodb 中。用户可以在前端编写规则来分割数据。其中一个要求是,可以给出规则以查找出生日期为今天的所有记录。为此,我可能需要按日和月过滤文档。到目前为止,我正在根据用户给出的规则动态地将 mongo 查询(java)构建为 BasicDBObject。

所以过滤器需要像 $date.month=12 && $date.day=10 一样发生(以获取出生日期低于 1​​2 月 10 日的所有记录)。

有人可以帮助如何在 Mongo 查询中实现它吗?

4

2 回答 2

0

这就是迭代文档的方式。这里没有任何聚合。

MongoCollection<Document> mongoCollection = mongoDatabase.getCollection(collectionName);
    FindIterable<Document> iterable;
    iterable = (ruleQuery == null) ? mongoCollection.find().limit(limit).skip(skipCount) : mongoCollection.find(ruleQuery).limit(limit).skip(skipCount);
    iterable = (projectionFieldsQuery == null) ? iterable : iterable.projection(projectionFieldsQuery);
    iterable = (sortQuery == null) ? iterable : iterable.sort(sortQuery);
    return iterable.iterator();
于 2017-11-28T05:48:25.977 回答
0

使用聚合框架没有任何问题。我什至会说,无论如何,它迟早将成为所有查询的默认设置——至少在内部......

尽管如此,如果没有它,您实际上可以获得三个选项,因为“正常”查询没有日期运算符:

  1. 您可以尝试使用不会超级高效的 $where 运算符:https ://docs.mongodb.com/manual/reference/operator/query/where/
  2. 您可以将日期部分信息(可能另外)存储在各个字段中,并在查询中简单地使用它们。这些字段可以被索引,所以这会很快。
  3. 日期在 MongoDB ( https://docs.mongodb.com/manual/reference/method/Date/ ) 中存储为 Unix 时间戳。因此,您可以尝试计算相关数字或范围并使用(一堆)长值访问它们。
于 2017-11-28T06:34:37.053 回答