我接到了这个电话:
exports.getBIMFromProject = function(req, res){
mongoose.model('bim').find({projectId: req.params['prj_id']}, function(err, bim){
if(err){
console.error(err);
res.send(500)
}
res.send(200, bim);
});
};
我在哪里指定要返回的属性?无法在文档中找到它。以上返回整个对象。我只想要返回一些属性。
这是我的架构:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var bimSchema = new Schema({
projectId: Number,
user: String,
items:[
{
bimObjectId: Number,
typeId: String,
position:{
floor: String,
room:{
name: String,
number: String
}
}
}
]
});
mongoose.model('bim', bimSchema);
我不想让我的休息电话中包含的物品数组。
答案 0 :(得分:22)
你使用投影。 mongoose query docs中的第一个示例包含投影操作。
注意:不是真正的代码b / c我突出了三星的重要位
// find each person with a last name matching 'Ghost', ***selecting the `name` and `occupation` fields***
Person.findOne({ 'name.last': 'Ghost' }, ***'name occupation'***, function (err, person) {
if (err) return handleError(err);
console.log('%s %s is a %s.', person.name.first, person.name.last, person.occupation) // Space Ghost is a talk show host.
})
未指定Person
架构,但我认为该示例足够清晰。
答案 1 :(得分:11)
MyModel.find({name: "john" }, 'name age address', function(err, docs) { })
这将仅返回字段名称,年龄和地址。
答案 2 :(得分:7)
Mongoose 提供了多种使用 find
、findOne
和 findById
来投影文档的方法。
// INCLUDE SPECIFIC FIELDS
// find user and return only name and phone fields
User.findOne({ email: email }, 'name phone');
// EXCLUDE SPECIFIC FIELD
// find user and return all fields except password
User.findOne({ email: email }, '-password');
projection
属性进行投影:// find user and return just _id field
User.findOne({ email: email }, {
projection: { _id: 1 }
});
.select()
方法:// find user and return just _id and name field
User.findOne({ email: email }).select('name');
// find user and return all fields except _id
User.findOne({ email: email }).select({ _id: 0 });
您也可以使用 find
和 findById
方法执行相同操作。
答案 3 :(得分:2)
在 .select()
的帮助下,这是可能的。
.select('projectId user')
可以使用.select('-items')
。所以为了获取一个字段,简单地,可以传递空格分隔的字段字符串,而对于忽略该字段,可以在使用该字段之前用空格分隔的字符串“-”。
答案 4 :(得分:1)
.Select()
方法用于选择查询结果中要返回哪些字段
let result = await MyModel.find({ user : "user" }).select('name lastname status')
答案 5 :(得分:-7)