选择两个不同字段之间的范围包含给定数字

时间:2016-04-12 20:25:28

标签: mongodb mongoose mongodb-query

我想在我的数据库上查找输入值介于或等于这两个字段LOC_CEP_INILOC_CEP_FIM

之间的文档

示例:用户使用值69923994向系统输入一个数字,然后我使用此输入在我的数据库中搜索在LOC_CEP_INILOC_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
}

4 个答案:

答案 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 中没有成功