2017-09-18 35 views
0

我正在研究nodejs並使用mongoose,我正在對_id和函數進行簡單搜索,但不會返回結果,儘管id存在於集合中。儘管id存在於集合中,但搜索函數永遠不會返回結果

App.js文件

var express = require('express'); 
var session = require('express-session'); 
var controllers = require('./controllers'); 
var mongoose = require('mongoose'); 

mongoose.connect('mongodb://127.0.0.1:27017/test', function(err){ 
    if(err){ 
     console.log('mongodb could not connect', err); 
     return err; 
    } 
    console.log('Mongodb Connected ..!') 
}); 
var app = express(); 
var http = require('http').Server(app); 

var port = process.env.PORT || 3030; 



app.use('/assets', express.static(__dirname + '/public')); 
app.set('view engine', 'ejs'); 
app.use(session({ 
    secret: 'somekey', 
    resave: false, 
    saveUninitialized: true 
})); 

controllers.html(app); 
controllers.api(app); 

http.listen(port); 

api.js文件

var Game = require('../models/game'); 
app.post('/api/gotobingo75', jsonParser, function(req, res){ 


     Game.findById('59260b9a0067b336a0002237', function(err, g_data){ 
      console.log('here you are', g_data); // Never gets here No matter what 
     }); 
    }); 

遊戲集合架構

var mongoose = require('mongoose'); 


var Schema = mongoose.Schema, 
    ObjectId = Schema.ObjectId; 

var childSchema = new Schema({ user: 'string', pattern:'String'}); 


var gameSchema = new Schema({  
    room_id : ObjectId,   
    users : [childSchema], 
    title  : String, 
    text  : String, 
    deleted : Boolean,  
}); 

var collectionName = 'gameCol' 
var Game = mongoose.model('game', gameSchema,collectionName); 
module.exports = Game; 

奇怪的是搜索開始有時工作,但90%的時間它不是加工。過去3天我一直在尋找這個問題,但沒有運氣。請幫助

+0

如果你console.log(err)你有什麼收穫嗎? – reedb89

+0

沒有。即使嘗試過嘗試catch,我使用visual studio代碼來通過調試做一步,但它沒有得到任何數據。 – Gurveer

+0

你可以在app.post()裏面記錄req.body嗎?我真的沒有看到太多可以在這裏出錯的地方。我引用文檔時唯一注意到的是var Game = mongoose.model('game',gameSchema)應該是參數。我無法找到一個模型需要3個參數的例子。 http://mongoosejs.com/docs/index.html – reedb89

回答

0

FindById方法將一個對象作爲第一個參數。你應該改變你像下面這樣:

Game.findById({_id: ' your object id'} , some function(err, game){ 
//some code 
}) 

上面的代碼將在你的遊戲數據庫中搜索,並返回一個對象,如果它發現一個或一個空的對象,如果它沒有。

+0

我也嘗試過,但沒有運氣。 最近我檢查,在嘗試趕上我收到此錯誤消息「沒有找到匹配的文件爲id:someid」。查找和保存代碼在for循環中 還嘗試了諾言查詢。 – Gurveer

+0

使用我建議的代碼時會出現什麼錯誤? –

+0

我在模式下設置了「,{versionKey:false}」,現在工作正常。那可以嗎? – Gurveer

0

findById始終以價值ObjectId()類型,以便始終在您使用findById它應該是一個ObjectId()不是string只是刺痛轉換爲ObjectId如下,並嘗試將工作。

var Object = new ObjectId('59260b9a0067b336a0002237'); 

Game.findById(object, function(err, g_data){ 
      console.log('here you are', g_data); // Never gets here No matter what 
     }); 
相關問題