您好,我想加入这些收藏集,我想让所有具有“ active”属性等于false的用户。我不知道如何获取此查询。有我的架构:
用户架构
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const UserSchema = new Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true
},
password: {
type: String,
required: true
},
type: {
type: String,
required: true
},
active:{
type:Boolean
}
});
module.exports = mongoose.model('users', UserSchema);
公司架构:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const CompanySchema = new Schema({
userId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'users'
},
companies: [{
name: {
type:String
},
country:{
type:String
}
}
]
});
module.exports = Company = mongoose.model('company', CompanySchema);
注意:并非所有用户的公司都只有“客户”类型,我想同时获得“客户”和“雇员”
答案 0 :(得分:1)
您可能希望重构架构,以更好地适应可用数据的类型。
例如:
用户架构:
const UserSchema = new Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true
},
password: {
type: String,
required: true
},
type: {
type: String,
required: true
},
active:{
type:Boolean
},
companies: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'company'
}]
});
和公司架构:
const CompanySchema = new Schema({
name: {
type:String
},
country:{
type:String
}
});
然后获取所有活动用户的列表,并自动为这些用户填充任何公司数据(假设您的用户模型称为UserModel)
UserModel.find({ active: false }).populate('companies').exec();
如果由于任何原因而无法编辑数据结构,则可以执行类似于以下的查询:
CompanyModel.aggregate([
{ $lookup: { from: 'users', localField: 'userId', foreignField: '_id', as: 'user' } },
{ $match: { '$user.active': false } }
]).exec()
这将在UserId字段上执行汇总查找,然后仅在active属性设置为false的情况下进行匹配。