2017-06-20 46 views
1

我有一個流星出版物,其中我嘗試使用.findOne()來訪問mongodb中的字段。但是,由於我不能從流星發佈返回.findOne(),我現在只使用.find()。問題是它返回一個遊標而不是文檔,所以我無法讀取我的發佈函數中該遊標內的值。如何從生成光標的同一出版物中的mongodb光標讀取值

下面是我的MongoDB查詢

var question = Question.find({ "_id": quesId }, 
    { fields: {"pages": 1, "settings.name": 1, "status": 1 }}, 
    {limit: 1}); 

而且我想用pages的價值,我從上面的查詢進去相同的發佈功能

回答

0

,你可以在你的光標設定的觀察員,獲得結果的鉤子。我經常這樣做來改變結果。

例如(我想提出的是,公佈名稱的假設是「問題」)

let cursor = Question.find({ "_id": quesId }, { "pages": 1, "settings.name": 1, "status": 1 }, {limit: 1}); 

let handle = cursor.observeChanges({ 
    added: (id, fields) => { 
     // look at fields 
     this.added('questions', id, fields); 
    }, 
    changed: (id, fields) => { 
     // look at fields 
     this.changed('questions', id, fields); 
    }, 
    removed: (id) => { 
     this.removed('questions', id); 
    } 
}); 

this.ready(); 

this.onStop(() => { 
    handle.stop(); 
}); 

這會給你一個鉤成在初始添加發布和變更後的記錄。當您的出版物準備好發佈時,請調用ready()(您可以在示例中看到this.ready())。

0

據我瞭解你的問題,你想訪問光標中的單個文檔,而不需要在代碼中執行多餘的findOne()。您可以將結果轉換爲光標上的.fetch(),使用[0]獲得第一個條目,然後直接獲取pages屬性。

const question = Question.find(quesId, 
    { fields: { "pages": 1, "settings.name": 1, "status": 1 }}); 
const pages = question.fetch()[0].pages; 

還要注意,在_id搜索時,你不必在你的過濾器來指定{_id: quesId},你可以直接使用你想要作爲過濾參數來搜索的價值,蒙戈假設您正在搜索的_id。此外,{limit: 1}是多餘的,因爲您正在搜索標量_id的值,因此可以保證遊標長度爲1。