填充字段的相等搜索
equal search of populated field
我在填充 OfferSchema 时遇到问题。
当我尝试获取当前用户的预订报价时,我从 mongoose 收到 MissingSchemaError: Schema hasn't been registered for model "offer"
错误。
租户字段正确填充。
我尝试了很多方法来解决这个问题,甚至是从官方文档中,但没有一个适合我。
我将不胜感激任何帮助,谢谢。
我的书架
const BookSchema = new Schema({
tenant: {
type: Schema.Types.ObjectId,
ref: 'user'
},
...
offer: {
type: Schema.Types.ObjectId,
ref: 'offer'
}
});
const BookModel = mongoose.model('books', BookSchema);
module.exports = BookModel;
我的报价架构
const OfferSchema = new Schema({
...
author: {
type: Schema.Types.ObjectId,
required: true,
ref: 'user'
}
});
const OfferModel = mongoose.model('offers', OfferSchema);
module.exports = OfferModel;
我如何尝试获得结果
const landlord = req.userData.userId;
Book.find().populate('tenant', 'email').populate({
path: 'offer',
match: {
'author': {
$eq: landlord
}
}
}).then(books => {
res.status(200).json({books: books})
}).catch(err => {
console.log(err);
res.status(500).json({error: err.message})
});
我已经用不同的方式解决了我的问题。
现在我正在搜索这样的当前用户的预订优惠,希望它对以后的人有用。
exports.get_landlord_books = async (req, res) => {
let offers = await Offer.find( {author: req.userData.userId});
if (offers) {
Book.find({
'offer': { $in: offers}
}).populate('tenant', 'email').then(books => {
res.status(200).json({books: books})
}).catch(err => {
console.log(err);
res.status(500).json({error: err.message})
});
} else {
console.log('no booked offers for this user')
}
};
我在填充 OfferSchema 时遇到问题。
当我尝试获取当前用户的预订报价时,我从 mongoose 收到 MissingSchemaError: Schema hasn't been registered for model "offer"
错误。
租户字段正确填充。
我尝试了很多方法来解决这个问题,甚至是从官方文档中,但没有一个适合我。 我将不胜感激任何帮助,谢谢。
我的书架
const BookSchema = new Schema({
tenant: {
type: Schema.Types.ObjectId,
ref: 'user'
},
...
offer: {
type: Schema.Types.ObjectId,
ref: 'offer'
}
});
const BookModel = mongoose.model('books', BookSchema);
module.exports = BookModel;
我的报价架构
const OfferSchema = new Schema({
...
author: {
type: Schema.Types.ObjectId,
required: true,
ref: 'user'
}
});
const OfferModel = mongoose.model('offers', OfferSchema);
module.exports = OfferModel;
我如何尝试获得结果
const landlord = req.userData.userId;
Book.find().populate('tenant', 'email').populate({
path: 'offer',
match: {
'author': {
$eq: landlord
}
}
}).then(books => {
res.status(200).json({books: books})
}).catch(err => {
console.log(err);
res.status(500).json({error: err.message})
});
我已经用不同的方式解决了我的问题。
现在我正在搜索这样的当前用户的预订优惠,希望它对以后的人有用。
exports.get_landlord_books = async (req, res) => {
let offers = await Offer.find( {author: req.userData.userId});
if (offers) {
Book.find({
'offer': { $in: offers}
}).populate('tenant', 'email').then(books => {
res.status(200).json({books: books})
}).catch(err => {
console.log(err);
res.status(500).json({error: err.message})
});
} else {
console.log('no booked offers for this user')
}
};