我在MEAN环境中使用以下mongoose查询来查找和输出特定作者及其相应的书籍。
Author
.findOne({personcode: code})
.select('-_id')
.select('-__v')
.populate('bookids') //referencing to book documents in another collection (->array of bookids)
.select('-_id') //this doens't affect the data coming from the bookids-documents
.select('-__v') //this doens't affect the data coming from the bookids-documents
.exec(function (err, data) {
//foo
});
我还想排除" _id"和" __ v"来自外部文档的填充数据中的字段。怎么能实现呢?
答案 0 :(得分:32)
populate
的第二个参数是字段选择字符串,因此您可以这样做:
Author
.findOne({personcode: code})
.select('-_id -__v')
.populate('bookids', '-_id -__v')
.exec(function (err, data) {
//foo
});
请注意,您应该将字段选择合并为一个字符串。
答案 1 :(得分:4)
要单独排除
User.findOne({_id: userId}).select("-password")
排除使用模式
var userSchema = mongoose.Schema({
email: {
type: String,
required: true,
unique: true,
},
password: {
type: String,
required: true,
select: false,
},
});
否则这也将起作用
db.collection.find({},{"field_req" : 1,"field_exclude":0});
答案 2 :(得分:2)
感谢JohnnyHK,对于object参数,这有效:
Entity.populate({
path: 'bookids',
// some other properties
match: {
active: true
},
// some other properties
select: '-_id -__v' // <-- this is the way
}).then(...) // etc
答案 3 :(得分:0)
我来寻找一些稍有不同的东西。万一有人需要和我一样。
您可以指定在创建架构期间自动填充的特定字段,如下所示
const randomSchema = mongoose.Schema({
name: {type: String,trim: true},
username: {type: String,trim: true},
enemies: {
type: ObjectId,
ref: randomMongooseModel,
autopopulate:{
select: '-password -randonSensitiveField' // remove listed fields from selection
}
},
friends: {
type: ObjectId,
ref: randomMongooseModel,
autopopulate:{
select: '_id name email username' // select only listed fields
}
}
});
在此示例中,我使用mongoose-autopopulate插件