我使用Mongoose.js并不能解决3级层次文档的问题.
有两种方法可以做到这一点.
首先 - 没有参考.
C = new Schema({
'title': String,
});
B = new Schema({
'title': String,
'c': [C]
});
A = new Schema({
'title': String,
'b': [B]
});
Run Code Online (Sandbox Code Playgroud)
我需要显示C记录.我怎么能填充/找到它,只知道C的_id?
我试着用:
A.findOne({'b.c._id': req.params.c_id}, function(err, a){
console.log(a);
});
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何从者返回一个只有我需要的对象的对象.
第二,如果使用refs:
C = new Schema({
'title': String,
});
B = new Schema({
'title': String,
'c': [{ type: Schema.Types.ObjectId, ref: 'C' }]
});
A = new Schema({
'title': String,
'b': [{ type: Schema.Types.ObjectId, ref: 'B' }]
});
Run Code Online (Sandbox Code Playgroud)
如何填充所有B,C记录以获得层次结构?
我试着用这样的东西:
A
.find({}) …Run Code Online (Sandbox Code Playgroud) 我在MongoDB中有这个设置
项目:
title: String
comments: [] // of objectId's
Run Code Online (Sandbox Code Playgroud)
评论:
user: ObjectId()
item: ObjectId()
comment: String
Run Code Online (Sandbox Code Playgroud)
这是我的Mongoose架构:
itemSchema = mongoose.Schema({
title: String,
comments: [{ type: Schema.Types.ObjectId, ref: 'comments' }],
});
Item = mongoose.model('items', itemSchema);
commentSchema = mongoose.Schema({
comment: String,
user: { type: Schema.Types.ObjectId, ref: 'users' },
});
Comment = mongoose.model('comments', commentSchema);
Run Code Online (Sandbox Code Playgroud)
这是我得到我的项目和评论的地方:
Item.find({}).populate('comments').exec(function(err, data){
if (err) return handleError(err);
res.json(data);
});
Run Code Online (Sandbox Code Playgroud)
如何使用相应的用户填充注释数组?由于每条评论都有一个用户ObjectId()?
我有一个数据集合(匹配),其中一个虚拟属性引用另一个集合(名册)。集合(名册)具有对集合(参与者)中另一个虚拟属性的引用。我已成功填充集合(名册)。但是,我无法填充集合(参与者)。
火柴
{
"_id": {
"$oid": "5c1b99843a71d812af25b10d"
},
"type": "match",
"id": "0b0ad010-ee86-11e8-b29a-061fc5dc976c",
"relationships": {
"rosters": {
"data": [
{
"type": "roster",
"id": "8dc6f770-ee88-11e8-b755-9d41e8e54ecc"
},
{
"type": "roster",
"id": "8dc6f774-ee88-11e8-b755-9d41e8e54ecc"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
}
花名册
"_id": {
"$oid": "5c1b99843a71d812af25b151"
},
"type": "roster",
"id": "f51f1250-ee87-11e8-a185-711497405867",
"relationships": {
"participants": {
"data": [
{
"type": "participant",
"id": "f51f1251-ee87-11e8-a185-711497405867"
},
{
"type": "participant",
"id": "f51f1252-ee87-11e8-a185-711497405867"
},
{
"type": "participant",
"id": "f51f1253-ee87-11e8-a185-711497405867"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所拥有的。
Match.find([])
.populate({
path: 'rosters', // virtual
populate: { …Run Code Online (Sandbox Code Playgroud) 模式定义
Team.js
var TeamSchema = new Schema({
// Team Name.
name: String,
lead: String,
students :type: [{
block : Number,
status : String,
student : {
type: Schema.ObjectId,
ref: 'Student'
}]
});
Run Code Online (Sandbox Code Playgroud)
Student.js
var StudentSchema = new Schema({
name: String,
rollNo : Number,
class : Number
});
Run Code Online (Sandbox Code Playgroud)
如何填充"学生"以获得输出,如下所示:
球队
{
"__v": 1,
"_id": "5252875356f64d6d28000001",
"students": [
{
"__v": 1,
"_id": "5252875a56f64d6d28000002",
block : 1,
status : joined,
"student": {
"name": Sumeeth
"rollNo" : 2
"class" : 5
}
},
{ …Run Code Online (Sandbox Code Playgroud) 我需要用Mongoose/Keystone填充两个级别,但是已经遇到了障碍.
我有3个型号:地区,国家和城市.地区包含国家和国家/地区包含城市
我的模特:
型号区域:
var Region = new keystone.List('Region');
Region.add({
name: {type: Types.Text}
, countries: {type: Types.Relationship, ref: 'Country', many: true}
});
Run Code Online (Sandbox Code Playgroud)
模范国家
var Country = new keystone.List('Country');
Country.add({
name: {type: Types.Text}
, cities: {type: Types.Relationship, ref: 'City', many: true}
});
Run Code Online (Sandbox Code Playgroud)
模范城市
var City = new keystone.List('City');
City.add({
name: {type: Types.Text}
});
Run Code Online (Sandbox Code Playgroud)
查询:
keystone.list('Region').model.find()
.populate('countries')
.exec(function(err, regions){
console.log(regions)
});
Run Code Online (Sandbox Code Playgroud)
产量:
{
name: 'Oceania',
countries: [
{
_id: 55d9b260415baa6958ac04c1
name: 'Australia',
cities: [
_id: 55d9b260415baa6958ac04c2,
_id: 55d9b260415baa6958ac04c3,
_id: 55d9b260415baa6958ac04c4
]
}, …Run Code Online (Sandbox Code Playgroud)