Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb“$gte“;及$lte“;Can';工作不好_Mongodb - Fatal编程技术网

mongodb“$gte“;及$lte“;Can';工作不好

mongodb“$gte“;及$lte“;Can';工作不好,mongodb,Mongodb,当我用“$gte”和“$lte”查询数据库时,返回了一些不匹配的数据,这让我很困惑。请帮帮我~~~谢谢 我期望loginTime的数据介于1535527571405和1535527571405之间 但结果并不一致 这是我的mongodb脚本和搜索结果: db.getCollection("userLog").find({ "loginlogs.loginTime" : {"$gte" : 1535527571405, "$lte" : 1535527571420}}, {'loginlogs.l

当我用“$gte”和“$lte”查询数据库时,返回了一些不匹配的数据,这让我很困惑。请帮帮我~~~谢谢

我期望loginTime的数据介于1535527571405和1535527571405之间 但结果并不一致

这是我的mongodb脚本和搜索结果:

db.getCollection("userLog").find({ "loginlogs.loginTime" : {"$gte" : 1535527571405, "$lte" : 1535527571420}}, {'loginlogs.loginTime': 1})


em~my db version是v.3.3.11

看到您的结果,loginLogs.loginTime是一个数组,因此您的查询将返回所有userLog,它们在loginLogs数组中具有相应的loginTime值。 为了满足您的需求,您可以使用聚合框架:

数据集:

{ 
    "_id" : ObjectId("5b87f33d9dc5882db7dd81fa"), 
    "loginLogs" : [
        {
            "loginTime" : 152.0
        }, 
        {
            "loginTime" : 167.0
        }, 
        {
            "loginTime" : 183.0
        }, 
        {
            "loginTime" : 192.0
        }, 
        {
            "loginTime" : 202.0
        }
    ]
}
{ 
    "_id" : ObjectId("5b87f3519dc5882db7dd81fb"), 
    "loginLogs" : [
        {
            "loginTime" : 154.0
        }, 
        {
            "loginTime" : 161.0
        }, 
        {
            "loginTime" : 178.0
        }, 
        {
            "loginTime" : 194.0
        }, 
        {
            "loginTime" : 198.0
        }
    ]
}
查询:

db.logs.aggregate(
    [
        {
            $unwind: {
                path : "$loginLogs",

            }
        },
        {
            $match: {
            "loginLogs.loginTime":{$gte:170,$lt:195}
            }
        },
        {
            $group: {
            _id:"$_id",
            loginLogs:{$push:"$loginLogs.loginTime"}
            }
        },
    ],
);
将输出:

{ 
    "_id" : ObjectId("5b87f3519dc5882db7dd81fb"), 
    "loginLogs" : [
        178.0, 
        194.0
    ]
}
{ 
    "_id" : ObjectId("5b87f33d9dc5882db7dd81fa"), 
    "loginLogs" : [
        183.0, 
        192.0
    ]
}

您可能更喜欢使用聚合的筛选器阶段

使用
db.userLog.aggregate([{$match:{“loginlogs”:{$elemMatch:{$loginTime:{$gte:1535527571405,$lte:1535527571420}}}}},{$project:{$loginTime:{$filter:{$input:'$loginlogs.loginTime',cond:{$gte:['$$this',1535527571405}}}}}}},{$eq:[$$this',1535527571420]}}}}},_id:0}}])
对不起,我的问题描述不清楚。我想得到符合条件的原始数据。根据您提供的线索,我通过执行以下脚本解决了问题
db.getCollection(“userLog”).find({loginlogs:{$elemMatch:{loginTime:{“$gte”:1535527571405,“$lte”:1535527571420}}}}})
不用担心。很高兴你解决了这个问题。