相信不少使用 Mongoose 的朋友都遇到过,想要在对参考字段的值进行搜索。
参考字段,也就是类似这样的字段:
{
type: MongooseSchema.Types.ObjectId,
ref: 'XXX',
}
例如我们有 Cat 这个 Model ,它有 sex (性别)、parents (父母)和 owner (主人)三个属性,ref 分别是 'Cat' 和 'Person'; Person 则有 name (名字)一个属性。
然后我们想要查询性别为女、父母的主人名字是 'Dean' 的猫,我们可能会这么写:
const result = await catModel
.find({
$and: {
parents: {
'owner.name': 'Dean',
},
sex: 0,
},
})
.exec();
但我们知道,这样只会报错。因为 parents 此刻是 ObjectId ,populate 是 Mongoose 的功能,不是 MongoDB 的。
假设使用 MongoDB 的 $lookup 呢,又麻烦,又丧失了 Mongoose 的不少便捷功能。
假设构建一个 method ,手动把搜索条件替换成符合搜索条件的 ObjectId 数组,又得特事特办,很麻烦。
所以,不如现在来使用 MongooseFindByReference 模块,它会自动把对参考字段的搜索,替换成符合搜索条件的 ObjectId 数组。
使用后,搜索条件就会被替换成:
const oldConditions = {
$and: {
parents: {
'owner.name': 'Dean',
},
sex: 0,
},
};
const newConditions = {
$and: {
parents: {
$in: [/* 符合条件的猫的 ObjectId 数组 */],
},
sex: 0,
},
};
欢迎下载,欢迎给 Star 嘿嘿
npm i mongoose-find-by-reference
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.