我试图在MongoDB中创建类别的层次结构,以通过Mongoose与Node.js一起使用。我正在使用“祖先数组”方法(http://docs.mongodb.org/manual/tutorial/model-tree-structures-with-ancestors-array/),并且已经将层次结构保存在数据库中。直接来自Mongo的元素如下所示:
{
"_id" : "Football",
"ancestors" : [
"Categories",
"Sports and fitness"
],
"parent" : "Sports and fitness"
}
我已经为类别创建了一个模型和控制器,并且到目前为止,在查询数据库时遇到了问题。
这是model / Category.js中的代码:
var mongoose = require('mongoose');
var Category = mongoose.Schema({
_id: String
});
var categorySchema = mongoose.Schema({
ancestors: [Category],
parent: [Category]
});
// Initiate database connection
var db = mongoose.createConnection('mongodb://localhost/Categories');
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
console.log("openDB categories");
});
module.exports.category = db.model('Category', categorySchema);
这是控制器:
var categoryModel = require('../models/Category');
var Category = categoryModel.category;
exports.getAncestors = function(req, res) {
if (req.params.id == undefined){res.send("no id specified!"); return;}
Category.findOne({_id: 'Football'}, 'ancestors', function(err, ancestors){
if(err) console.log(err);
res.send(ancestors);
});
}
运行此代码时,我收到以下错误消息:
{ message: 'Cast to ObjectId failed for value "Football" at path "_id"',
name: 'CastError',
type: 'ObjectId',
value: 'Football',
path: '_id' }
我相信问题可能出在猫鼬架构上,但是所有帮助都将不胜感激。非常感谢!
猫鼬默认情况下会尝试设置一个ObjectId。您可以使用以下方法抑制这种情况:
var categorySchema = mongoose.Schema({
_id: String,
ancestors: [{type: String }],
parent: {type: String}
},{ _id: false });
var Category = mongoose.model( "Category", categorySchema );
请注意,只有一种架构可供您布局。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句