簡體   English   中英

具有謂詞功能的PyMongo查詢

[英]PyMongo Queries with a Predicate Function

我在數據庫中存儲了一系列帖子,如下所示:

{
    content: 'foo',
    location: (37.423021, -122.083739)
},
{
    content: 'bar',
    location: (37.422473, -122.090386)
}

我還有一個函數,可以計算兩點between的距離(以英里為單位)。 其工作方式如下:

>>> between((37.423021, -122.083739), (37.422473, -122.090386))
0.36649505427211615

我正在使用它來構建一個valid的謂詞函數,該謂詞函數將接收到文檔中並返回一個布爾值,表示它是否有效。 該函數可能類似於:

def valid(document):
    return between(document.location, CONSTANT_LOCATION)

是否可以將此謂詞用作查詢的選擇器?

是的你可以。 您可以使用搜索中提供的自定義javascript函數來執行此操作。 請注意,您必須使用javascript編寫兩者之間的內容。

在mongo中檢查$ where子句,但請記住它將對集合進行完整掃描。

db.myCollection.find({ $where: function() {
   return (between((37.423021, -122.083739), (37.422473, -122.090386)) < 1);
}});

如果您使用Haversine計算2個點之間的距離,請在此處查看我的優化公式

我無法理解的一件事是:如何獲得第一點和第二點。 看起來它們在不同的文檔中。

編輯比你將與方法沒有問題,我公司提供。 您可以在return內部編寫函數,也可以嘗試保存函數(在SO的某處已對此進行了說明)如何按照我演示的方式調用它。 使用文檔中的坐標-您必須執行以下操作: this.location[0]this.location[1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM