2016-08-24 69 views
-1

所以我在我的nodejs服務器上實現了一個mongodb。而我所做的是商店的用戶通過:MongoDB從db中獲取一個項目

function insertUser() { 
 
    var collection = dbb.collection('user'); 
 
     var user1 = {name: user, token: token}; 
 
     collection.insert(user1, function(err, result) { 
 
      if (err) { 
 
       console.log(err); 
 
      } else { 
 
       console.log(result); 
 
      } 
 
     }); 
 
}

function findUserByName(devName) { 
 
\t var collection = dbb.collection('user'); 
 
    collection.find({name: devName}).toArray(function (err, result) { 
 
     if (err) { 
 
      console.log(err); 
 
     } else if (result.length) { 
 
      console.log('Found: ', result); 
 
\t \t \t 
 
      selectedUserToken = result.token; 
 
     } else { 
 
      console.log('No document found'); 
 
      insertUser(); 
 
     } 
 
     dbb.close(); 
 
    }); 
 
}

那麼結果將等於:

Found: [ { _id: 57be1cadc281c03ea116c9ab, 
    name: 'Austin Hunter', 
    token: 'dJyXVjMJk08kXWrua8SUjKb....SxACihKZoR53y_wOZmcFNKMmD5q99QNvsp3flL' } ] 

我的問題是,如何能我得到了這個標記等於selectedUserToken,所以我可以用gcm發送推送通知?現在result.token是未定義的。

回答

1

您應該使用findOne()代替find()因爲你只想到一個結果回:

function findUserByName(devName) { 
    var collection = dbb.collection('user'); 
    collection.findOne({name: devName}, function (err, result) { 
     if (err) { 
      console.log(err); 
     } else if (result) { 
      console.log('Found: ', result); 

      selectedUserToken = result.token; 
     } else { 
      console.log('No document found'); 
      insertUser(); 
     } 
     dbb.close(); 
    }); 
} 

但是,如果你想離開你的代碼是與find()方法你只需檢索的第一個元素find()

function findUserByName(devName) { 
    var collection = dbb.collection('user'); 
    collection.find({name: devName}).toArray(function (err, result) { 
     if (err) { 
      console.log(err); 
     } else if (result.length) { 
      console.log('Found: ', result); 

      selectedUserToken = result[0].token; 
     } else { 
      console.log('No document found'); 
      insertUser(); 
     } 
     dbb.close(); 
    }); 
} 
+0

檢索到的結果數組仍然無法正常使用findOne方法正常工作。 –

+0

我仍然沒有定義console.log(selectedUserToken) –

+0

我將發佈我的整個Nodejs服務器代碼的一個pastern。所以你可以看到上下文。 http://pastebin.com/v1ij99fL –