MongoDB:按今天的出生日期查找/筛选数据,无需聚合

MongoDB:按今天的出生日期查找/筛选数据,无需聚合,mongodb,collections,aggregation-framework,dbobject,Mongodb,Collections,Aggregation Framework,Dbobject,我正在开发一个产品,用户可以上传数据,数据的数据类型将由用户在上传时动态获取。我正在mongodb中存储数据。用户可以在前端编写规则来分割数据。其中一个要求是,该规则可以找到所有出生日期为今天的记录。为此,我可能需要按天和月筛选文档。到目前为止,我正在根据用户给定的规则动态地将mongo查询(java)构建为BasicDBObject 因此,筛选需要像$date.month=12&&$date.day=10那样进行(以获取出生日期在12月10日以下的所有记录) 有人能帮助我们如何在Mongo查询

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

因此,筛选需要像$date.month=12&&$date.day=10那样进行(以获取出生日期在12月10日以下的所有记录)


有人能帮助我们如何在Mongo查询中实现它吗

这就是我遍历文档的方式。这里没有任何聚合

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();
MongoCollection MongoCollection=mongoDatabase.getCollection(collectionName);
可查找的可查找的;
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);
返回iterable.iterator();

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

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();
MongoCollection MongoCollection=mongoDatabase.getCollection(collectionName);
可查找的可查找的;
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);
返回iterable.iterator();

使用聚合框架没有错。我甚至会说,不管怎样,它迟早会成为所有查询的默认值——至少在内部是如此

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

  • 您可以尝试使用$where运算符,但该运算符效率不高:
  • 您可以将日期部分信息(可能另外)存储在各个字段中,并在查询中简单地使用它们。这些字段可以被编入索引,这样速度会更快
  • 日期作为Unix时间戳存储在MongoDB()中。因此,您可以尝试计算相关的数字或范围,并使用(一组)长值访问它们

  • 使用聚合框架没有错。我甚至会说,不管怎样,它迟早会成为所有查询的默认值——至少在内部是如此

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

  • 您可以尝试使用$where运算符,但该运算符效率不高:
  • 您可以将日期部分信息(可能另外)存储在各个字段中,并在查询中简单地使用它们。这些字段可以被编入索引,这样速度会更快
  • 日期作为Unix时间戳存储在MongoDB()中。因此,您可以尝试计算相关的数字或范围,并使用(一组)长值访问它们

  • 我不想通过聚合实现这一点。我在这里做的实际过程是获取所有文档,并通过应用过滤器和投影进行迭代。我没有使用聚合。我不想用聚合实现这一点,可能是重复的。我在这里做的实际过程是获取所有文档,并通过应用过滤器和投影进行迭代。我没有使用聚合。