2017-05-22 4 views
1

Sailjs에서 Waterline ORM을 사용하여 mongodb에서 쿼리 할 수있는 방법은 중첩 OR 조건이있는 여러 AND 조건이 있습니다.중첩 또는 조건이있는 다중 위치 (또는 AND) 사용?

예제 MySQL의 쿼리는 다음과 같습니다

SELECT * FROM Users WHERE (score IS NULL OR activity IS NULL) AND (invited IS NULL OR invited_by IS NULL) 

여러 이야기 해봐을()는 모든 조건을 사용하여 OR 논리를 파괴 소품, 작동하는 것 같군되지는 않습니다.

주위의 모든 솔루션?

답변

1

예상되는 솔루션의 범위 내에 있지만 .query() 메소드가 없는지 확실하지 않습니다.

Users.query('SELECT * FROM Users WHERE (score IS NULL OR activity IS NULL) AND (invited IS NULL OR invited_by IS NULL)', [ ] ,function(err, result) { 
    if (err) { // do something } 
    else {// do something else with the result} 


}); 

P. :이 쿼리를 직접 실행하지 않았습니다. 내 일부 구문 오류가있을 수 있습니다.

더 참조 할 수 있도록이 페이지에 http://sailsjs.com/documentation/reference/waterline-orm/models/query

EDIT를보고하십시오 : 미안 해요,하지만 MongoDB를 사용하면 네이티브() 메소드를 사용할 필요가 질문을 오해. MongoDB의 스키마를 가지고 있지 않습니다

var queryCriteria = { 
    "$and" : [{"$or" : [{ "score" : null },{"activity" : null}] },{"$or" : [{ 
"invitedby" : null },{"invited" : null}] } ] 
} 

그런 다음이

Users.native(function(error, collection) { 
    if (error) return res.serverError(error); 

    collection.find(queryCriteria ,{}).toArray(function (err, results) { 
    if (err) return res.serverError(err); 
    return res.ok(results); 
    }); 
}); 

P.P.S 같은 기본 방법을 사용할 수 있습니다 뭔가 것처럼해야한다. 따라서 데이터를 생성하는 동안 명시 적으로 null을 입력하지 않으면 해당 필드가 생성되지 않습니다. 즉, 데이터에 점수 필드가 전혀 없을 수도 있습니다.이 경우 null을 {$ exists : false}로 바꿔야합니다. 또한 전에이 원시 방법을 사용했습니다 내 매우 제한된 경험에서 그것은 매우 느립니다 .. 내 경우 중 하나에서 약 10의 transactionPerSecond 점점 기억 해요. 그것을 참조하십시오. .native에 대한

링크() http://sailsjs.com/documentation/reference/waterline-orm/models/native

+0

난 당신이 질문을 보면 내가 수선 모델 (그 가능한 경우)를 사용하여 MongoDB로 예를 들어 MySQL의 쿼리를 매핑 할, MongoDB의에 쿼리를 실행하려합니다. – Abdullah

+0

예, 맞습니다. 기본 흘수선은 매우 제한적으로 지원됩니다. 감사합니다. – Abdullah