猫鼬通过附件查找过滤

时间:2020-08-31 03:44:29

标签: mongoose find

我正在努力使用猫鼬和nodejs进行查询。我正在尝试从供应商处获取所有预订,此供应商与Doc包中的预订Doc有关。 我有这个预订模式:

const bookingSchema = new Schema( {

    package: {
        type: Schema.Types.ObjectId,
        ref: 'Package',
        required: [ true, 'A reference to a package must exist']
    },


    requesters: {
        type: Number,
        default: 1
    },

    status: {
        type: String
    },

}); 

这是程序包模式:

const packageSchema = new Schema( {


    title: {
        type: String
    },


    profile: {
        type: Schema.Types.ObjectId,
        ref: 'Profile',
        required: [ true, 'A reference to a profile must exist']
    },

    service: {
        type: Schema.Types.ObjectId,
        ref: 'Service',
        required: [ true, 'A reference to a service must exist']
    },

});

现在,我正在尝试通过与个人资料和服务相关的信息来获取该提供商的所有预订:

 const filter = { 
        $and: [
        {"package" : { $exists: true } }, 
        {"package.profile": ObjectId(profile._id)}
        ]
    };


return Booking.find( filter )
            .populate({
                path: 'package',
                match: {'profile' : { $exists: true}},
                model: 'Package',
                select : 'profile service',

                populate : [
                    {
                    path : 'profile',
                    model: 'Profile',
                    select : '_id name user'

                    
                    },               
                ]
            })
            .populate(
                {
                    path : 'service',
                    model: 'Service',
                    select : '_id'
                }
                 
            )
            .sort( { date: -1 } )
            .exec();

但是我得到一个空数组,而不是结果。这是我可以在控制台中看到的查询。

Mongoose: bookings.find({ '$and': [ { package: { '$exists': true } }, { 'package.profile': ObjectId("5f2a668ccee9bd8fd7a75d29") } ]}, { sort: { date: -1 }, projection: {} })
bookings []

我只需要预订此提供者的预订,其中profile._id等于我传递给find方法的提供者简介。

非常感谢。

1 个答案:

答案 0 :(得分:0)

最后我解决了这个问题:

 const packages = await Package.find({'profile' : profile._id}).select('_id').exec();

    const ids: any = packages.map( (pkg: any) => {
        return pkg._id;
    });

 return Booking.find( {'package': {$in: ids}} ) .....

还有另一个更好的解决方案吗?