MongoDB查询不相等

时间:2019-02-11 12:58:31

标签: mongodb mongodb-query

我正在尝试进行一些mongoDB查询,但是它不起作用。 这是对象的外观:

%let report_date = '01-JAN-2019'D;

data _null_;
  put 'Hello';
  date = &report_date;
  put 'View on ' date mmddyyp10. ' has been updated';
run;

现在,我需要查找最近24小时内已修改其数据的用户 这是我尝试过的查询,但不起作用

{
    "_id" : ObjectId("5c616e96aeddc93e2c076101"),
    "_class" : "school.domain.mongo.User",
    "username" : "test1234",
    "password" : "test1234",
    "status" : "ACTIVE",
    "time_created" : ISODate("2019-02-11T13:46:14.753+01:00"),
    "last_modified" : ISODate("2019-02-11T13:46:14.753+01:00")
}

用户必须处于活动状态,最近一次修改的范围是现在和过去24小时 上次修改的时间必须与创建时间不同,因为如果修改的时间与过去24小时内仅创建而不修改的用户相同。 我已经尝试过该查询,但仍然为我提供具有相同last_modified和time_created值的用户。

2 个答案:

答案 0 :(得分:1)

您必须使用$expr来匹配同一文档中的两个字段

db.getCollection('user').find({
  "status" : "ACTIVE",
  "last_modified": { "$lt": new Date(), "$gte": new Date(new Date().setDate(new Date().getDate()-1)) }
  "$expr": { "$ne": ["$last_modified", "$time_created"] }
})

答案 1 :(得分:1)

此查询来自@Anthony Winzlet,可在Robo3T上使用。但是当我在春季使用它进行自定义查询时:

@Query("{ $and : [ {'status' : 'ACTIVE'}, {'last_modified' : { $lt: new Date(), $gte: new Date(new Date().setDate(new Date().getDate()-1))}}, {'$expr': { '$ne': ['$last_modified', '$time_created']}}]}")
    public List<User> findModifiedUsers();

不起作用,它在启动项目时返回了一些错误。 因此,我尝试在春季使用Criteria进行查询:

Query query = new Query();
            Criteria criteria = new Criteria();  
            criteria.andOperator(Criteria.where("status").is(UserStatus.ACTIVE), Criteria.where("last_modified").lt(new Date()).gt(lastDay), Criteria.where("time_created").ne("last_modified"));

但是它不起作用,它使我回到所有用户,就像没有不等于last_modified和time_created的最后一个条件一样。