它的時間,這一問題被揭穿,因爲我自己也很厭倦了這裏的假響應。
作爲一個單位的代碼很好。唯一可能發生的問題是您發送錯誤的東西或收集到錯誤的集合,以及最後一個涉及價值本身的問題。
你需要什麼比「原始」等表達和貓鼬這個工作,因爲我的上市證明:
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並通過貓鼬或通過任何其他方法? –