我在mongodb中创建了一个非常嵌套的架构。看起来像这样
{
"_id": ObjectID("559690ec34c506cea4be1775"),
"cities": [
{
"val": "something",
"pincode": [
{
"val": "something",
"people": [
{
"val": "something",
"frnds": [
{
"val": "something1",
"frndaddress": [
{
"val": "something2"
}
]
}
]
}
]
}
]
}
]
}
这个文件在mongodb中正确插入但是我不知道如何转换这是mongoose我用mongoose尝试这个但是它看起来不起作用
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
// create a all city list, without id
var allCitySchema = new Schema({
cities: [{
val:{ type: String },
pincode:[{
val:{ type: String },
people:[{
val:{ type: String },
frnds:[{
val:{ type: String },
frndaddress:[{
val:{ type: String },
}]
}]
}]
}]
}]
}, {collection: 'allcities'});
var allcities = mongoose.model('allcities', allCitySchema);
module.exports = allcities;
我是节点和mongodb的新手,我创建了上面的架构,我甚至不知道它的正确与否。
答案 0 :(得分:1)
我建议您尝试扁平化数据结构。这实际上取决于所有这些字段是如何连接的,但是,根据我的经验,一个好的经验法则是通过引用数组链接mongoDB中的对象是保持关系但仍允许高度解耦信息的好方法。下面是一个如何设置上述模式但仍保留所需关系的示例。 首先是每个城市的架构:
// A Schema for city information
var mongoose = require('mongoose');
var People = require('./people.js');
var City = new mongoose.Schema({
//Pincode for this city object
pincode: { type: String },
// An array of references to the people objects for those who live in this city
people: [{ type: mongoose.Schema.Types.ObjectId, ref: 'People' }]
});
module.exports = mongoose.model('City', City);
然后在一个单独的文件中,为人们构建一个架构:
// A Schema for person information
var mongoose = require('mongoose');
var Friends = require('./people.js');
var Person = new mongoose.Schema({
//The address of this Person object
address: { type: String },
// An array of references to the other people objects who are friends of this person
friends: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Friends' }]
});
module.exports = mongoose.model('People', People);
请注意,朋友也是人物对象。这种数据结构有几个优点。 1)所有字段在数据库中只有一个位置,因此使用最少的磁盘空间,因为很少(仅参考ID)冗余。 2)通过mongoose population和deep population获取mongoose,通过数据库查询从多个模式中检索信息非常简单。