2012-07-31 44 views
0

我有一個Mongoose模型,包含地方。每個的地方都有一個緯度/經度。我可以定義一個名爲的Mongoose virtual attribute距離,這將用於按升序對Places進行排序。從距離虛擬屬性中,引用用戶位置信息的最佳方式是什麼(假設它現在存儲在會話變量中)?引用基於會話的數據在Mongoose虛擬屬性

+0

我不太明白你的問題。 Place的虛擬屬性只應引用Place的其他屬性,而不是會話中的數據。 – JohnnyHK 2012-07-31 17:17:58

+0

@JohnnyHK你說得對 - 我要求一個虛擬屬性,它取決於不屬於Place的屬性。那可能嗎?即使有可能,使用虛擬屬性是實現它的最佳方式? – 2012-07-31 18:30:58

+0

不,對於涉及外部數據的任何事情,我認爲您希望將[method](http://mongoosejs.com/docs/methods-statics.html)添加到架構中。 – JohnnyHK 2012-07-31 18:50:55

回答

1

對於涉及外部數據的任何事情,向模式添加method將是比虛擬屬性更好的選擇。

+0

但您如何在集合上調用該方法? – chovy 2014-05-17 17:52:05

-2

如果您更喜歡使用虛擬,則可以將用戶位置信息存儲在NodeJs全局變量中。例如,此代碼可能會在用戶登錄後設置:

global.user_location = user.location; 
+2

我想知道如果使用全局變量可能會有點冒險,因爲服務器可能同時處理多個用戶請求。你可能能夠避開它,但如果你的任務正在等待回調,我懷疑另一個用戶的位置可能會在全球範圍內出現。 – 2013-01-01 08:56:19

0

我正在解決類似的問題。問題是如果你想對單個值執行一個操作,但是我正在檢索一個列表,並且想要在列表中的每個記錄中注入一個新的虛擬字段 - 但是使用會話數據來生成該字段,那麼方法就沒有問題。要做到這一點安全(避免全局性),我想我需要使用QueryStream並注入新的字段使用ArrayFormatter將會話變量作爲構造參數。

這也看起來像LINQ的工作,所以另一種方法可能是使用LINQ to JS的一個端口。