尽管ID存在于集合中,但搜索函数永远不会返回结

时间:2017-09-18 16:36:17

标签: javascript node.js mongoose

我正在使用nodejs并使用mongoose,我正在进行简单的_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天我一直在寻找这个问题,但没有运气。请帮忙

2 个答案:

答案 0 :(得分:0)

FindById方法将对象作为第一个参数。您应该改变以下内容:

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

以上代码将在您的游戏数据库中进行搜索,如果找到一个对象,则返回一个对象,如果没有,则返回一个空对象。

答案 1 :(得分:0)

findById始终将值设为ObjectId()类型,因此当您使用findById时,它应该是ObjectId()而不是string只需将sting转换为{ {1}}如下所示,尝试一下就可以了。

ObjectId