我在下面有一個查詢。我想得到4到6之間的項目,所以只有a:1應該匹配,因爲它的值爲b。
> db.test.find({ b : { $gt : 4 }, b: {$lt : 6}});
{ "_id" : ObjectId("4d54cff54364000000004331"), "a" : 1, "b" : [ 2, 3, 4, 5 ] }
{ "_id" : ObjectId("4d54d0074364000000004332"), "a" : 2, "b" : [ 2, 4, 6, 8 ] }
>
有人可以告訴爲什麼a:2匹配這個查詢嗎?我真的不明白爲什麼它會被退回。
我也試了一下在本教程規定,但ID似乎沒有工作:
> db.test.find({ b : { $gt : 4, $lt : 6}});
{ "_id" : ObjectId("4d54cff54364000000004331"), "a" : 1, "b" : [ 2, 3, 4, 5 ] }
{ "_id" : ObjectId("4d54d0074364000000004332"), "a" : 2, "b" : [ 2, 4, 6, 8 ] }
>
而這一次,以避免有關GT任何混淆/ GTE
> db.test.find({b: {$gt: 4.5, $lt: 5.5}});
{ "_id" : ObjectId("4d54cff54364000000004331"), "a" : 1, "b" : [ 2, 3, 4, 5 ] }
{ "_id" : ObjectId("4d54d0074364000000004332"), "a" : 2, "b" : [ 2, 4, 6, 8 ] }
>
只有一個:1應該返回。
至於建議,我給了$ elemMatch一個嘗試,但它似乎沒有工作,要麼(的ObjectID是不同的,因爲我是在不同的機器上)被送回
> db.test.find();
{ "_id" : ObjectId("4d5a24a5e82e00000000433f"), "a" : 1, "b" : [ 2, 3, 4, 5 ] }
{ "_id" : ObjectId("4d5a24bbe82e000000004340"), "a" : 2, "b" : [ 2, 4, 6, 8 ] }
> db.test.find({b: {$elemMatch: {$gt : 4, $lt: 6 }}});
>
沒有文檔。
其實,這兩份文件應返回,這個問題的意思是「給我其中'B'具有的值是4和6之間的所有文件」,這是滿意由兩個文件。你能否更詳細地解釋它想要查詢的內容?爲什麼要找到第一個文件,而不是第二個? – Theo
正如你上面所說的,我想要所有ab在4和6之間的文檔。只有a:1滿足這個(不是兩個),因爲a:2不包含4和6之間的任何值(使用gt和lt排除4和6他們自己在哪裏,包括它們在內)。我嘗試了一個不同的查詢(請參閱編輯的問題),它更清晰,但仍然無法正常工作... – paullb
我明白你的意思了,我把它當作一個範圍來考慮(範圍通常包括第一個元素) ,但當然不是,這是嚴格的小於和大於。我已經刪除了我的回答,因爲現在很清楚它是錯誤的。 – Theo