使用KeystoneJs的猫鼬两级人口[重复]

Posted

技术标签:

【中文标题】使用KeystoneJs的猫鼬两级人口[重复]【英文标题】:Mongoose two level population using KeystoneJs [duplicate] 【发布时间】:2015-11-17 10:25:03 【问题描述】:

我需要使用 Mongoose / Keystone 填充两个级别,但遇到了障碍。

我有 3 个模型:地区、国家和城市。 Regions 包含国家,国家包含城市。

我的模型:

模型区域:

var Region = new keystone.List('Region');

Region.add(
      name: type: Types.Text
    , countries: type: Types.Relationship, ref: 'Country', many: true
);

示范国家

var Country = new keystone.List('Country');

Country.add(
      name: type: Types.Text
    , cities: type: Types.Relationship, ref: 'City', many: true
);

模范城市

var City = new keystone.List('City');

City.add(
      name: type: Types.Text
);

查询:

keystone.list('Region').model.find()
    .populate('countries')
    .exec(function(err, regions)
        console.log(regions)
    );

产量:

    
        name: 'Oceania',

        countries: [
            
                _id: 55d9b260415baa6958ac04c1   
                name: 'Australia',
                cities: [
                    _id: 55d9b260415baa6958ac04c2,
                    _id: 55d9b260415baa6958ac04c3,
                    _id: 55d9b260415baa6958ac04c4
                ]
            ,

                
                _id: 55d9b260415baa6958ac04c5
                name: 'New Zealand',
                cities: [
                    _id: 55d9b260415baa6958ac04c6,
                    _id: 55d9b260415baa6958ac04c7
                ]
            
        ]
    ,

    
        name: 'Americas',
        countries: [
            
                _id: 55d9b260415baa6958ac04c1   
                name: 'USA',
                cities: [
                    _id: 55d9b260415baa6958ac04d2,
                    _id: 55d9b260415baa6958ac04d3,
                    _id: 55d9b260415baa6958ac04d4
                ]
            ,

                
                _id: 55d9b260415baa6958ac04c5
                name: 'Canada',
                cities: [
                    _id: 55d9b260415baa6958ac04e6,
                    _id: 55d9b260415baa6958ac04e7
                ]
            
        ]
    
]

我将如何填充城市?据我了解,Mongoose 不支持深度人口。

我可以查询结果吗?或者如何查询?

【问题讨论】:

可能不重复,因为keystone.js的查询不同 【参考方案1】:

在猫鼬中你可以这样做:

regionModel.find().populate("countries").exec(function(err, regions)

    if(err)
        throw err;
    

    // Regions with populate countries
    cityModel.populate(regions, 
        path: 'countries.cities',
        select: '_id name'
    ,function(err, regions) 

        //Regions with Countries and Populated Cities

    );

)

其实我不熟悉keystone 语法,但我尝试将其转换为keystone 语法。希望它有效,如果没有请尝试将上面的代码转换为keystonejs

keystone.list('Region').model.find()
        .populate('countries')
        .exec(function(err, regions)

            if(err)
                throw err;
            

            keystone.list('City').model.find()
                    .populate('cities')
                    .exec(function(err, regions)
                        console.log(regions)
                    );

        );

【讨论】:

太棒了!感谢您的回复。我非常接近,几乎就在那里。感谢您的帮助。 这怎么可能,很明显,对于kewystone,aboe代码在语法上是错误的。所以如果您认为它有效,那么您可以放置​​实际的梯形相关代码 .populate( path: 'countries', populate: path: 'cities', )

以上是关于使用KeystoneJs的猫鼬两级人口[重复]的主要内容,如果未能解决你的问题,请参考以下文章

没有重复的猫鼬帖子

没有模式的猫鼬

用于续集模型的猫鼬模式

如何在打字稿中的猫鼬userschema.methods中使用“this”

静态方法的猫鼬继承

无法查询嵌套的猫鼬数组?