2014-11-27 3 views
0

각 창고에 선택적으로 상위웨어 하우스가있는 노드 js/express 앱에 다음 스키마가 있습니다. 나는 창고를 저장하는 코드를 작성했지만 창고 (부모가 있음)를 검색하고 상위웨어 하우스 이름을 얻는 방법을 알아낼 수 없다 ... 그래서 한 번의 호출로 그렇게 할 수있는 방법이 있는지 궁금해하고 있었습니까? 감사합니다.개체를 기반으로 이름을 검색하십시오. _id

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var warehouseSchema = new Schema({ 
    name: { type: String, required: true }, 
    parentID: { type: String, ref: 'Warehouse' } 
}); 

module.exports = mongoose.model('Warehouse', warehouseSchema); 

답변

2

그냥 as Philipp said, 당신은 하나의 MongoDB auery로 할 수 없습니다.

그러나 사용, 단일 몽구스의 명령으로 할 수있는 그 Query Population feature :

Warehouse.findById(warehouse_id).populate('parentID').exec(function(err, doc) { 
    if (err) { 
    // something get wrong 
    } else { 
    // doc.parentID is a parrent Warehouse here 
    } 
}) 

내부적으로 몽구스는 MongoDB를 두 개의 별도의 쿼리를 만들 것입니다 (하위 문서에 대한 한 후 부모에 대한 또 다른) 부탁하면 하나의 명령처럼 보일 것입니다.

+0

감사합니다. Leonid, 그게 내가 찾고있는 것이고, 대단히 감사 하네. – MChan

1

MongoDB는 데이터베이스에서 JOIN을 할 수 없습니다. 상위가웨어 하우스 오브젝트의 참조 인 한, 하나의 u 리로 둘을 검색 할 수는 없습니다. 먼저웨어 하우스를 쿼리 한 다음 두 번째 쿼리를 사용하여 참조를 확인해야합니다.

두 번째 쿼리가 발생하지 않도록하려면 상위 문서에 대한 필수 정보를 하위 문서에 포함시켜야합니다. MongoDB의 중복 된 정보는 관계형 데이터베이스에서와 같이 비정상적이지 않습니다.

+0

도움을 주신 Philipp에게 감사드립니다. 감사합니다. – MChan

관련 문제