2014-02-28 1 views
1

그래서 'ingredients'의 관계가있는 레서피에 대한 모델이 있습니다. 이는 ObjectId의 배열입니다. mongo 쉘에서 다음 쿼리를 실행할 때 제대로 작동하고 모든 데이터를 반환합니다.

Example model : 
{ 
"name": "...",  
"_id": ObjectId("530ca903746515c0161e6b9f"),  
"ingredients": [ 
    ObjectId("53069363ff7447a81a3a7a1d"), 
    ObjectId("53069363ff7447a81a3a7a17") 
]  
} 

Query: 
db.drink.find({"ingredients":{"$in":[ObjectId("53069364ff7447a81a3a7a87"), ObjectId("530fb948c1a3ff480d58e43c")]}}); 

사용 sails.js 자신의 수선 ORM하지만, 그들은 정말이 생각을 조회 또는 적어도 내가 찾을 수있는 모든 가능한 구글 검색을 통해 할 수있는 방법이 없습니다. 그래서 나는 다음과 같은 것을 가지고있는 기본 드라이버를 사용하려고 시도 -

var ings = new Array(); 
for (var i in req.body) { 
    ings.push(new ObjectID(req.body[i].toString())); 
} 
Drink.native(function(err, collection){ 
    if(err){ 
    return res.send(err, 500); 
    } else { 
    collection.find({"ingredients":{"$in":ings}}).toArray(function(err, data){ 
     console.log(data); 
    }); 
    } 
}); 

것은 데이터 배열이 콜백 반환 것은 항상 비어 있습니다. 'ings'배열을 검사하면 객체 ID 배열이므로 모든 데이터를 반환하지 않는 이유는 확실하지 않습니다. 'find'함수에서 json 객체를 제거하면 모든 것을 반환합니다. 누구나 sails.js를 사용할 때이 쿼리가 데이터를 반환하도록 만드는 방법을 알고 있습니까?

+0

'find' 쿼리에서 사용중인'ings' 배열에 올바른 데이터가 들어 있는지 확인 했습니까? – sgress454

+0

당신은 올바른 스캇입니다, 그것은 두 가지였습니다. 하나는 어떤 이유에서였습니다. 내가 가지고있는 ID는 한 항목에서 다른 항목으로 일치하지 않았습니다. 위의 예제에서 ID를 수동으로 하드 코딩하면 ings 배열로 돌아 간다. 위대한 캐치를 가져 주셔서 감사합니다, 다른 사람들에게 도움이 될 수 있기를 바랍니다.하지만 웹에서이 작업을 수행하는 데 어려움을 겪었습니다. – obj63mc

답변

0

실제로 위의 코드는 관계간에 ID가 일치하지 않는 mongodb의 내부 데이터 문제였습니다. 관계가 재건되었을 때 모든 것이 제대로 작동하고 있습니다.