簡體   English   中英

在Mongoose / Mongodb中不知道_id的情況下嵌入文檔

[英]Embed document without knowing _id in Mongoose/Mongodb

我知道MongoDB中沒有“連接”。 我正在嘗試將大量文檔鏈接到我的location集合中的40,000多個位置。

我的位置集合具有自定義(讀取:不在我的控制下)位置標識符及其對應的緯度/經度坐標。

var Locations = new Schema({
    location_id: String, 
    loc: { //lng, lat: as per mongodb documents
         type: [Number], 
         index: '2d'
    } 
});

有幾個集合具有引用此自定義標識符的字段以匹配緯度和經度。

var MyCollection = new Schema({
    location: String,
    otherFields: Strings...
});

我對如何最好地解決這個問題感到有些迷茫。 很多帖子建議通過Schema鏈接,但我只看到了Schema.Types.ObjectId 這對我來說似乎不切實際,因為我導入的數據只有自定義標識符。

我是否可以在MyCollection添加另一個字段,並在上傳數據時找到要鏈接到的位置的正確_id 如果是這樣,有人可以指出我正確的方向來實現這一目標。

可能會以某種方式使用Map reduce嗎? 我對Mongo還是有點新手。

試着

我確實嘗試將整個位置數據加載到JS對象中,然后根據我的其他查詢中的返回對象檢查該對象,將匹配的位置數據注入到我的返回對象中。 這種方法有效但速度難以忍受

首先,僅為記錄:MongoDb仍將為您存儲的每個對象生成_id屬性。

1. "[...], if the mongod receives a document to insert that does not contain an _id field, mongod will add the _id field that holds an ObjectId. [...]" 

資源

您寫道, location_id不在您的控制之下。 並且您想使用location_id,因為其他集合也在使用它? 因此,您不希望破壞項目中的標准,這是好的。

正如我所看到的,你已經在MyCollection中擁有了location屬性,並且可以在那里存儲location_id 據我所知,你現在必須編寫自己的鏈接方法。 如果要通過MyCollection by訪問,則必須將location_id存儲在MyCollection中並加載位置

Locations.find({location_id: <the_location_id>})

但也許您的主要問題是您無法在可靠的時間找到您正在尋找的位置

我不知道你找到MyCollection的 地點標准是。 如果它是坐標附近,那么您可以通過過濾掉您真正不需要檢查的位置來減少要檢查的位置數量。 那么你不必檢查所有40.000個位置,但可能只有100個? 在下面我假設它是接近。

你有兩個集合中的lat,lonLocationsMyCollection )嗎? 如果是這樣,您可以定義一個查詢,該查詢獲取MyCollection對象周圍的位置(正方形)。 然后,您將從MongoDb收到少量的地點 現在,您可以應用更復雜的檢查,檢查它們是否真正屬於您的MyCollection -object

這樣的事情:

Locations.find({lat: {$gt: <x>-a, $lt: <x>+a}, lon: {$gt: <y>-b, $lt: <y>+b}}, function(locations){ ... });

我希望它有所幫助。

暫無
暫無

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

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