我想在我的数据库上查找输入值介于或等于这两个字段LOC_CEP_INI
和LOC_CEP_FIM
示例:用户使用值69923994向系统输入一个数字,然后我使用此输入在我的数据库中搜索在LOC_CEP_INI
和LOC_CEP_FIM
字段范围内具有此值的所有文档
我的一个文档(在此示例中,查询选择了此文档,因为输入位于范围内):
{
"_id" : ObjectId("570d57de457405a61b183ac6"),
"LOC_CEP_FIM" : 69923999, //this field is number
"LOC_CEP_INI" : 69900001, // this field is number
"LOC_NO" : "RIO BRANCO",
"LOC_NU" : "00000016",
"MUN_NU" : "1200401",
"UFE_SG" : "AC",
"create_date" : ISODate("2016-04-12T20:17:34.397Z"),
"__v" : 0
}
答案 0 :(得分:2)
您必须反转字段名称和查询值。
db.zipcodes.find({
LOC_CEP_INI: {$gte: 69923997},
LOC_CEP_FIM: {$lte: 69923997}
});
要使查询示例正常工作,您需要保留array
属性,并且此道具中的每个项目都包含69923997
道具。然后,Mongo会检查此69923997
道具对于"LOC_CEP_INI"
道具中的每个项目的值是否都在"LOC_CEP_FIM"
和array
之间。
此外,我不确定您是否需要LOC_CEP_INI <= 69923997 <= LOC_CEP_FIM
或相反,因此您可能需要切换$gte
和$lte
条件。
答案 1 :(得分:2)
db.collection.find( { field: { $gt: value1, $lt: value2 } } );
https://docs.mongodb.com/v3.2/reference/method/db.collection.find/ 请参考此mongo提供带有$ gt和$ lt。
的范围设施答案 2 :(得分:0)
db.zipcodes.find({
&#34; LOC_CEP_INI&#34;:{&#34; $ lte&#34;:69900002}, &#34; LOC_CEP_FIM&#34;:{&#34; $ gte&#34;:69900002}})
答案 3 :(得分:0)
这是根据需要使用它的逻辑:
Userdb.aggregate([
{ "$match": { _id: ObjectId(session._id)}},
{ $project: {
checkout_list: {
$filter: {
input: "$checkout_list",
as: "checkout_list",
cond: {
$and: [
{ $gte: [ "$$checkout_list.createdAt", new Date(date1) ] },
{ $lt: [ "$$checkout_list.createdAt", new Date(date2) ] }
]
}
}
}
}
}
<块引用>
这里我使用过滤器,由于某种原因,嵌套数据的数据查询在 mongodb 中没有成功