社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  MongoDB

MongoDB查询不相等

acab05 • 7 年前 • 847 次点击  

我正在尝试进行一些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
文章 [ 2 ]  |  最新文章 7 年前
acab05
Reply   •   1 楼
acab05    7 年前

来自@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    7 年前

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