2013-03-10 79 views

回答

34

流星使用相同的方法對對象ID的,如果你選擇使用它:

Meteor.Collection.ObjectID()相同MongoDB的ObjectID

它剛下Meteor.Collection名。它使用EJSON將普通JSON中的對象標識保存到客戶端。因爲基本上有2個數據庫與流星

Minimongo

這是一種在客戶端的MongoDB的緩存。當瀏覽器加載時,數據從服務器上的主mongodb下載到這個數據庫。當更改完成後,它們被推送到服務器。

服務器的MongoDB

這是10gen的原MongoDB的服務器上

,是因爲這兩個數據庫流星需要Meteor.Collection包MongoDB的功能,讓您使用相同的代碼,同時在中客戶端和服務器。

默認情況下meteor不會使用對象ID,它將使用隨機字母數字文本。這樣做是爲了讓您可以在您的網址和ID屬性中輕鬆使用ID。

如果您確實使用new Meteor.Collection.ObjectID(),您將得到一個ObjectID對象,該對象將在服務器端使用mongodb的ObjectID規範。對象ID中的時間戳值沒有被保留,但這不應該造成任何傷害。

+0

我浪費了20分鐘的時間試圖找出爲什麼正則表達式'/^[0-9a-fA-F] + $ /'正在用我的ObjectIds返回'false' ...您提到的流星使用「隨機字母數字文本「,是否有任何邏輯來測試給定的字符串是否是一個有效的ID? – 2013-12-12 01:02:32

+3

@BradM你可以嘗試檢查'/^[A-Za-z0-9] {17} $ /'是否可以工作。它也不完全是字母數字,從未在_id中看到0或1。我認爲數字比可以在視覺上混合起來,如l和1不被使用。 – Akshat 2013-12-12 05:47:11

4

由於0.9.1流星建議使用Mongo.ObjectID而不是Meteor.Collection.ObjectID。基本上都是一樣的。 查詢history.md瞭解命名約定中的更多更改。

+0

是的,看到這個,但很難找出如何獲得_id字符串。使用以下內容。 'var newID = new Mongo.ObjectID; item._id = newID._str;' 感謝這個話題http://stackoverflow.com/questions/19236685/how-do-i-use-new-meteor-collection-objectid-in-my-mongo-查詢與 - 流星 – yankeyhotel 2015-05-11 21:55:29