我正在使用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天我一直在寻找这个问题,但没有运气。请帮忙
答案 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