Node.js MongoDB:如何查询带有“IS NOT(MAX())”条件的文档?

Node.js MongoDB:如何查询带有“IS NOT(MAX())”条件的文档?,node.js,mongodb,Node.js,Mongodb,这是一个名为test的集合 { {"_id": 1, "groupName": "A", lastModified: ISODate("2012-09-17T23:25:56.314Z")}, {"_id": 2, "groupName": "A", lastModified: ISODate("2013-09-17T23:25:56.314Z")}, {"_id": 3, "groupName": "A", lastModified: ISODate("2016-01-

这是一个名为
test
的集合

{
    {"_id": 1, "groupName": "A", lastModified: ISODate("2012-09-17T23:25:56.314Z")},
    {"_id": 2, "groupName": "A", lastModified: ISODate("2013-09-17T23:25:56.314Z")},
    {"_id": 3, "groupName": "A", lastModified: ISODate("2016-01-10T23:25:56.314Z")},
    {"_id": 4, "groupName": "B", lastModified: ISODate("2020-09-17T23:25:56.314Z")},
    {"_id": 5, "groupName": "B", lastModified: ISODate("2000-01-17T23:25:56.314Z")}
}
我想使用以下条件查询此集合中的某些文档:

  • groupName
    为“A”
  • lastModified
    不是
    具有
    “groupName”:“A”的文档的
    lastModified
    字段的最大值(
    ISODate(“2016-01-10T23:25:56.314Z”)
  • 所以在这种情况下,结果应该是

    {
        {"_id": 1, "groupName": "A", lastModified: ISODate("2012-09-17T23:25:56.314Z")},
        {"_id": 2, "groupName": "A", lastModified: ISODate("2013-09-17T23:25:56.314Z")}
    }
    
    我将Node.js与
    Node mongodb native
    模块一起使用。
    我可以在不获取和迭代整个文档的情况下完成吗?我的意思是,我可以在DB中完成吗?

    如果您一定要按groupName进行筛选,这个简单的查询可以帮助您在不需要太多性能开销的情况下实现所需的结果

    db.test.find({groupName:“A”}).skip(1).sort({lastModifiedAt:-1})


    但是,如果您有更复杂的场景/分组/嵌套,则可能需要使用
    aggregate
    mapReduce
    框架。

    谢谢。但是,
    .skip(1)
    的目的似乎是删除最伟大的一个,所以它应该在跳过表单之前进行排序。它不应该是
    db.test.find({groupName:“A”}).sort({lastModified:-1}).skip(1)
    ?不客气。在编写Mongo查询时,这并不重要。Mongo将始终执行
    排序
    ,然后执行
    跳过
    ,然后执行
    限制
    。这样答案总是有意义的。试试看,谢谢!这对我帮助很大!