2017-09-18 29 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 
     }); 
相关问题