복붙노트

[MONGODB] MongoDB를, 몽구스 어떻게 발견 문서의 하위 문서를 찾는 방법은?

MONGODB

MongoDB를, 몽구스 어떻게 발견 문서의 하위 문서를 찾는 방법은?

내가 찾은 문서의 _id에 의해 하위 문서를 얻으려고 노력에 붙어있어.

예 스키마

var User = mongoose.Schema({
        name:       String,
        photos:    [{src: String, title: String}]
    });
var Team = db.model('Team', Team);

지금은 하나의 사용자를 받고 있어요 :

myUser = User.findOne(...)...

어떻게 그것의 _id (또는 제목)에 의해 지금 SRC 자신의 사진받을 수 있나요?

뭔가 같은 :

myUser.photos.findOne({'_id': myId})

해결법

  1. ==============================

    1.당신은 필요 하나 임베디드 문서에 새 스키마를 만들거나 혼합 유형으로 몽구스 해석 때문에 빈 배열로 유형 선언을 둡니다.

    당신은 필요 하나 임베디드 문서에 새 스키마를 만들거나 혼합 유형으로 몽구스 해석 때문에 빈 배열로 유형 선언을 둡니다.

    var userSchema = new mongoose.Schema({
      name: String,
      photos: []
    });
    var User = mongoose.model('User', userSchema);
    
    var userSchema = new mongoose.Schema({
      name: String,
      photos: [photoSchema]
    });
    
    var photoSchema = new mongoose.Schema({
      src: String,
      title: String
    });
    
    var User = mongoose.model('User', userSchema);
    

    그리고 당신은 thusly 히 절약 할 수 있습니다 :

    var user = new User({
      name: 'Bob',
      photos: [ { src: '/path/to/photo.png' }, { src: '/path/to/other/photo.png' } ]
    });
    
    user.save();
    

    여기에서, 당신은 단순히 포함 된 문서를 찾기 위해 배열 프리미티브를 사용할 수 있습니다 :

    User.findOne({name: 'Bob'}, function (err, user) {
    
      var photo = user.photos.filter(function (photo) {
        return photo.title === 'My awesome photo';
      }).pop();
    
      console.log(photo); //logs { src: '/path/to/photo.png', title: 'My awesome photo' }
    });
    

    당신은 ID로 조회 포함 된 문서에 특별한 ID () 메소드를 사용할 수 있습니다 :

    User.findOne({name: 'Bob'}, function (err, user) {
        user.photos.id(photo._id);
    });
    

    당신은 더 여기 읽을 수 있습니다 : http://mongoosejs.com/docs/subdocs.html

    그렇지 않으면 새로운 컬렉션을 만들 것입니다, 당신이 몽구스와 스키마를 등록하지 마십시오합니다. 또한 하위 문서를 자주 검색하는 경우, 다음과 같이 심판과 인구를 사용하는 것이 좋은 아이디어가 될 것이라는 점을 명심하십시오. 그것 훨씬 빠르게 인덱싱 때문에, 두 번 DB 안타에도 불구하고. 또한, 몽구스는 (즉, 아이들은 물론 아이들의 문서를) 두 번 중첩 문서에 봉크합니다

    var user = mongoose.Schema({
      name: String,
      photos: [{ type: Schema.Types.ObjectId, ref: 'Photo' }]
    });
    
    var photo = mongoose.Schema({
      src: String,
      title: String
    });
    
    User
      .findOne({ name: 'foo' })
      .populate('photos')
      .exec(function (err, user) {
        console.log(user.photos[0].src);
      });
    

    관련 문서는 여기 http://mongoosejs.com/docs/populate.html 찾을 수 있습니다

  2. ==============================

    2.내 제한된 경험에서, srquinn의 대답에 추가 나는 채우기 함께 다른 그룹에서 문서를 결합하기위한 알았는데?

    내 제한된 경험에서, srquinn의 대답에 추가 나는 채우기 함께 다른 그룹에서 문서를 결합하기위한 알았는데?

    난 그냥 User.findOne 할 수 여기에 생각 ({이름을 'foo는'}, '사진')에 대한 속기입니다 :

    const query = User.findOne({ name: 'foo' })
    query.select('photos')
    
  3. from https://stackoverflow.com/questions/21142524/mongodb-mongoose-how-to-find-subdocument-in-found-document by cc-by-sa and MIT license