2013-10-26 175 views
3

我很高興地看到近期對Meteor 0.6.6中的minimongo增加了對地理空間索引的近乎支持。但是,它看起來並不像$ near(它應該按距離排序)的排序行爲是反應性的。也就是說,當文檔被添加到集合中時,客戶端加載它,但始終在結果列表的末尾,即使它比其他文檔更接近$ near座標。當我刷新頁面時,訂單被糾正。

例如:

服務器:

Meteor.publish('events', function(currentLocation) { 
    return Events.find({loc: {$near:{$geometry:{ type:"Point", coordinates:currentLocation}}, $maxDistance: 2000}}); 
}); 

客戶:

Template.eventsList.helpers({ 
    events: function() { 
     return Events.find({loc: {$near:{$geometry:{ type:"Point", coordinates:[-122.3943391, 37.7935434]}}, 
$maxDistance: 2000}}); 
    } 
}); 

有沒有辦法讓它被動排序?

+0

嗨,我在最近的版本中實現了$支持,並且實際測試了排序以及其他屬性。我會把這個問題放在我的列表中,在GitHub上打開一張票也是很好的 – imslavko

+0

這是否仍然適用於meeor v1? – Sahan

回答

7

沒有什麼特別之處像預想的那樣在minimongo任何其他查詢$near查詢排序反應:要麼minimongo使用了一些排序功能基於查詢或默認的排序包含$near操作查詢通過您的排序符。

Minimongo將對所有內容進行排序,並在每次更新內容時將新訂單與新訂單進行比較。

從你原來的問題,目前還不清楚你期望什麼樣的行爲,你看到了什麼。只是爲了證明提到的分揀工作被動,我寫了一個小程序來顯示它:

HTML模板:

<body> 
    {{> hello}} 
</body> 

<template name="hello"> 
    Something will go here: 
    {{#each things}} 
    <p>{{name}} 
    {{/each}} 
</template> 

和JS文件:

C = new Meteor.Collection('things'); 

if (Meteor.isClient) { 
    Template.hello.things = function() { 
    return C.find({location:{$near:{$geometry:{type: "Point",coordinates:[0, 0]}, $maxDistance:50000}}}); 
    }; 

} 

if (Meteor.isServer) { 
    Meteor.startup(function() { 
    C.remove({}); 

    var j = 0; 
    var x = [10, 2, 4, 3, 9, 1, 5, 4, 3, 1, 9, 11]; 

    // every 3 seconds insert a point at [i, i] for every i in x. 
    var handle = Meteor.setInterval(function() { 
     var i = x[j++]; 
     if (!i) { 
     console.log('Done'); 
     clearInterval(handle); 
     return; 
     } 

     C.insert({ 
     name: i.toString(), 
     location: { 
      type: "Point", 
      coordinates: [i/1000, i/1000] 
     } 
     }); 
    }, 3000); 
    }); 
} 

我看到的啓動應用程序之後並打開瀏覽器:編號從x陣列中逐個出現在屏幕上。每當新號碼到達時,它就會出現在正確的位置,並始終保持順序排序。

您的意思是'$ near reactive sorting'的其他意思嗎?

+0

是的,它的工作原理。我正在混合GeoJSON點和座標對,mongodb支持這些對,但是您對minimongo的添加不會。沒有理由支持這個,我不認爲mongodb應該避免混淆。 對不起虛驚! –

+0

@islavko,我試圖做這個這麼久,但它不工作..是這樣我格式化我的數據集或什麼? – Sahan