我的项目中有这个Person和User模型:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const schema = new Schema({
name: {
type: String,
required: true
}
});
module.exports = mongoose.model('Person', schema);
和
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const schema = new Schema({
person: {
type: mongoose.SchemaTypes.ObjectId,
ref: 'Person',
required: true
},
email: {
type: String,
required: true
}
});
module.exports = mongoose.model('User', schema);
如我们所见,用户对个人的引用。我正在尝试通过其电子邮件或其人名查找一个用户。我尝试了许多不同的方法,例如:
exports.getUserByPersonNameOrEmail = async (uservalue) => {
var user = await User.findOne({
$or: [
{"person.name": uservalue},
{email: uservalue}
]
});
return user;
};
我还阅读了有关使用$elemMatch
命令的信息,但似乎它用于具有子项数组而不是特定子项的文档。
答案 0 :(得分:0)
您必须在match
期间使用猫鼬填充及其populate
步骤:
var user = await User.findOne({}).populate({
path: 'person',
match: { name: uservalue },
select: 'name -_id'
}).exec()
您可以阅读更多about it here。基本的想法是,您必须在使用模型中populate
对person
的实际引用才能查询它们。 match
在填充等时应用过滤器。