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