Py学习  »  MongoDB

MongoDB查询不相等

acab05 • 5 年前 • 536 次点击  

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

{
    "_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小时内修改了数据的用户 这是我试过的问题,但不起作用

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

用户必须处于活动状态,最近一次在当前范围内修改,过去24小时内修改 最后修改的时间必须与创建的时间不同,因为如果它与用户相同,则只在过去24小时内创建而不修改。 我已经尝试过这个查询,它仍然会给我具有相同的上次修改和时间创建值的用户。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30807
 
536 次点击  
文章 [ 2 ]  |  最新文章 5 年前
acab05
Reply   •   1 楼
acab05    5 年前

来自@anthony winzlet working i robo3t的查询。但当我在Spring中使用它进行自定义查询时:

@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();

不起作用,它在启动项目时返回一些错误。 所以我试着在春天用条件进行查询:

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"));

但它不起作用,它返回给我所有的用户,就像没有这个最后的标准不等于最后修改和创建的时间。

Anthony Winzlet
Reply   •   2 楼
Anthony Winzlet    5 年前

你必须使用 $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"] }
})