programing

Mongoose, 찾기, 특정 속성 반환

magicmemo 2023. 5. 21. 11:19
반응형

Mongoose, 찾기, 특정 속성 반환

나는 다음과 같은 전화를 받았습니다.

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);

저는 제 휴식 시간에 항목 배열이 포함되는 것을 원하지 않습니다.

투영법을 사용합니다.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는 , 및 를 사용하여 문서를 투영하는 여러 가지 방법을 제공합니다.

문자열로 투영:

// 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 }
});

사용 방법:

// 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 });

및 방법으로도 동일한 작업을 수행할 수 있습니다.

MyModel.find({name: "john"}, 'name age address', function(err, docs) {
    console.log(docs);
});

필드를 반환합니다.name,age그리고.address오직.

의 도움으로.select()이것은 가능합니다.

  • 필요한 필드 수가 총 필드 수보다 적을 경우,.select('projectId user')사용할 수 있습니다.
  • 그렇지 않으면 무시할 필드의 수가 전체 필드에서 더 적습니다..select('-items')사용할 수 있습니다.

따라서 필드를 가져오는 경우 공백으로 구분된 필드 문자열을 전달하고 필드를 무시하는 경우에는 "-"로 구분된 문자열을 사용하기 전에 공백으로 구분된 필드를 전달할 수 있습니다.

자세한 설명서를 참조하십시오.

특정 속성 찾기는 일부 속성도 피합니다.

await User.find({ email: email }, { name: 1, phone: 1, status: 1, password: 0 });

.Select()쿼리 결과에서 반환할 필드를 선택하는 데 사용되는 메서드

let result = await MyModel.find({ user : "user" }).select('name lastname status')

언급URL : https://stackoverflow.com/questions/25330555/mongoose-find-return-specific-properties

반응형