当我用“ $ gte”和“ $ lte”查询数据库时,返回了一些不匹配的数据,这让我很困惑。请帮助我~~~谢谢!!!
我期望的登录时间数据在1535527571405和1535527571405之间 但是结果不一致
这是我的mongodb脚本和搜索结果:
db.getCollection("userLog").find({ "loginlogs.loginTime" : {"$gte" : 1535527571405, "$lte" : 1535527571420}}, {'loginlogs.loginTime': 1})
em〜我的数据库版本是v.3.3.11
答案 0 :(得分:0)
看到结果,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
]
}
答案 1 :(得分:0)