Мангуст, найти, вернуть конкретные свойства
У меня есть этот вызов:
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);
Я не хочу, чтобы массив items был включен в мой вызов rest.
7 ответов
Вы используете проекцию. В первом примере в документации по запросу mongoose есть проекционная операция.
NB: не реальный код 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
схема не указана, но я думаю, что пример достаточно ясен.
Mongoose предоставляет несколько способов проектирования документов с помощью,
findOne
, и .
1. Проекция в виде строки:
// 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');
2. Проекция мимоходом
projection
свойство:
// find user and return just _id field
User.findOne({ email: email }, {
projection: { _id: 1 }
});
3. Использование
.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
методы тоже.
MyModel.find({name: "john" }, 'name age address', function(err, docs) { })
Это вернет только имя поля, возраст и адрес.
.Select()
метод используется для выбора, какие поля должны быть возвращены в результате запроса
let result = await MyModel.find({ user : "user" }).select('name lastname status')
С помощью
.select()
это возможно.
- Если количество требуемых полей меньше общего количества,
.select('projectId user')
может быть использован - Остальное количество полей, которые следует игнорировать, меньше общего количества полей, тогда
.select('-items')
может быть использован.
Таким образом, для получения поля можно просто передать строку полей, разделенную пробелом, а для игнорирования поля - строку, разделенную пробелом, со знаком «-» перед использованием поля.
Для получения дополнительной документации .
Найти определенные свойства также избегать некоторых свойств
await User.find({ email: email }, { name: 1, phone: 1, status: 1, password: 0 });
Вам необходимо определить схемы вашей модели http://mongoosejs.com/docs/guide.html