它的时间,这一问题被揭穿,因为我自己也很厌倦了这里的假响应。
作为一个单位的代码很好。唯一可能发生的问题是您发送错误的东西或收集到错误的集合,以及最后一个涉及价值本身的问题。
你需要什么比“原始”等表达和猫鼬这个工作,因为我的上市证明:
var async = require('async'),
express = require('express'),
mongoose = require('mongoose'),
Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/simple');
var personSchema = new Schema({
firstName: String,
lastName: String,
email: String
});
var Person = mongoose.model('Person', personSchema);
var app = express();
mongoose.connection.on('open',function(err) {
async.series(
[
function(callback) {
Person.remove({},callback);
},
function(callback) {
Person.create({
firstName: "John",
lastName: "Doe",
email: "[email protected]"
},callback);
}
],
function(err,results) {
if (err) throw err;
console.log(
"Created and call in URL: %s",
results[1]._id
);
// setup routes
app.get('/people', function(req,res) {
Person.find(function(err,docs) {
res.send(docs)
});
});
app.get('/people/:id', function(req,res) {
Person.findById(req.params.id,function(err,doc) {
res.send(doc);
});
});
app.listen(3000);
console.log("ready");
}
);
});
其中给出的输出,如:
所以,当你调用服务器在/people
你得到的网址:
[
{
"_id":"55e0464e66e13f6506e8e38e",
"firstName":"John",
"lastName":"Doe",
"email":"[email protected]",
"__v":0
}
]
作为回应。
而当你用id作为/people/55e0464e66e13f6506e8e38e
打电话,那么你得到:
{
"_id":"55e0464e66e13f6506e8e38e",
"firstName":"John",
"lastName":"Doe",
"email":"[email protected]",
"__v":0
}
正如预期的那样。
因此,如果您的应用程序无法正常工作,那么您要么未按照自己的想法发送消息,要么实际上在集合中存在值为_id
的字符串,或者它在集合或数据库名称中完全不匹配。所有的网址都应该有效,如果没有网址,那么后者就是这样。
在_id
的是一个字符串的话,那么该模式是错误的,需要是:
var personSchema = new Schema({
_id: String
firstName: String,
lastName: String,
email: String
},{ "_id": false });
其中最重要的是,除了在架构设置正确类型_id
场也{ "_id": false }
。
这是因为你需要这个来告诉猫鼬而不是试图将“字符串”解析成ObjectId
,因为它默认情况下总是如此。
没有设置“字符串”将总是失败。
但是这个清单是什么工作的证明,也是真正需要的唯一改变,如果事实上_id
包含“字符串”或其他类型。因此,如果一个Number
然后既设置_id: Number
架构,并且{ "_id": false }
否则相同的失败原因发生。
对于纯粹的愚蠢然后我的房源改为:
var personSchema = new Schema({
_id: { type: String, default: "55e0464e66e13f6506e8e38e" },
firstName: String,
lastName: String,
email: String
},{ "_id": false });
,看它的工作每次也。
也请删除{ "_id": false }
并注意它失败,所以它变得清楚为什么这是必需的,当_id
类型意味着被覆盖。
你是否尝试过使用ObjectId构造函数,如http://stackoverflow.com/questions/6578178/node-js-mongoose-js-string-to-objectid-function? – mguimard
我不确定你的意思,你的意思是这样的: http://pastebin.com/nFxSrZqw 如果是遗憾的是它不适用于我:( – Andurit
是否已经使用您的应用程序填充了数据的MongoDB并通过猫鼬或通过任何其他方法? –