2017-04-22 232 views
-1

我正在使用nodejs和mongodb。 我想搜索一个数字范围内的文档,但该函数总是给我在范围之外的数字。例如,这是我的功能,我想,他们有一个字段的大小与1之间的数字到1200的文档的结果:MongoDB范围问题

db.collection(example).find({ 
    size: { 
    "$gte": 1, 
    "$lte": 1200 
    } 
}).toArray(function(err, results) { 
    db.close(); 
    console.log("results=" + results); 
}); 

在数据库中的文档:

{ "_id" : ObjectId("56659a492b9eaad2d9e6d4d2"), "size" : -1 } 
{ "_id" : ObjectId("56659a492b9eaad2d9e6d4d3"), "size" : 100 } 
{ "_id" : ObjectId("56659a492b9eaad2d9e6d4d4"), "size" : 800 } 
{ "_id" : ObjectId("56659a492b9eaad2d9e6d4d5"), "size" : 1999 } 

查询的结果应该是:

{ "_id" : ObjectId("56659a492b9eaad2d9e6d4d3"), "size" : 100 } 
{ "_id" : ObjectId("56659a492b9eaad2d9e6d4d4"), "size" : 800 } 

但查询的结果是:

{ "_id" : ObjectId("56659a492b9eaad2d9e6d4d2"), "size" : -1 } 
{ "_id" : ObjectId("56659a492b9eaad2d9e6d4d3"), "size" : 100 } 
{ "_id" : ObjectId("56659a492b9eaad2d9e6d4d4"), "size" : 800 } 
{ "_id" : ObjectId("56659a492b9eaad2d9e6d4d5"), "size" : 1999 } 
+0

我按照你想要的方式编辑了 – RandomGuy17

+0

你在示例文档中有'_id'值的重复,但修复后,当我尝试查询时,它工作正常。 – JohnnyHK

+0

这是实际的数据吗? Ids是重复的 –

回答

2

我相信你需要在你的尺寸条件下使用$和子句。它可能看起来像这样:

db.collection(example).find({ 
    $and: [ 
    { size: { $gte: 1 } }, 
    { size: { $lte: 1200 } } 
    ] }).toarray... 

请参阅mongo文档中的示例here

编辑:其实,一个隐含的,很好。如上所述,这里的实际问题是大小值被存储为字符串,而不是整数。

+0

@ RandomGuy17您不需要使用'$和',所以如果问题实际上是文档中的size值是字符串,那么未来的用户将会误导这一点。 – JohnnyHK