[mongodb] Mongo에서 “null이 아닌”을 어떻게 쿼리합니까?
다음 쿼리를 실행하고 싶습니다.
db.mycollection.find(HAS IMAGE URL)
올바른 구문은 무엇입니까?
답변
“IMAGE URL”이라는 키가있는 모든 문서를 반환하지만 여전히 null 값을 가질 수 있습니다.
db.mycollection.find({"IMAGE URL":{$exists:true}});
“IMAGE URL”이라는 키 와 null이 아닌 값 이 모두있는 모든 문서를 반환합니다 .
db.mycollection.find({"IMAGE URL":{$ne:null}});
또한 문서에 따르면 $ exists는 현재 인덱스를 사용할 수 없지만 $ ne는 사용할 수 있습니다.
편집 :이 답변에 관심이 있기 때문에 몇 가지 예 추가
이러한 인서트가 주어지면 :
db.test.insert({"num":1, "check":"check value"});
db.test.insert({"num":2, "check":null});
db.test.insert({"num":3});
이렇게하면 세 문서가 모두 반환됩니다.
db.test.find();
첫 번째와 두 번째 문서 만 반환합니다.
db.test.find({"check":{$exists:true}});
첫 번째 문서 만 반환합니다.
db.test.find({"check":{$ne:null}});
두 번째와 세 번째 문서 만 반환됩니다.
db.test.find({"check":null})
답변
하나의 라이너가 최고입니다.
db.mycollection.find({ 'fieldname' : { $exists: true, $ne: null } });
여기,
내 컬렉션 : 원하는 컬렉션 이름을 입력하십시오
분야 명 : 원하는 필드 이름을 입력하십시오
설명 :
존재하는 $ : true 인 경우 $ exists는 필드 값이 널인 문서를 포함하여 필드를 포함하는 문서와 일치합니다. false 인 경우, 조회는 필드를 포함하지 않은 문서 만 리턴합니다.
$ ne 은 필드 값이 지정된 값과 다른 문서를 선택합니다. 필드가 포함되지 않은 문서가 포함됩니다.
따라서 제공된 경우 다음 쿼리는 imageurl 필드가 있고 null 값이없는 모든 문서를 반환합니다.
db.mycollection.find({ 'imageurl' : { $exists: true, $ne: null } });
답변
pymongo에서는 다음을 사용할 수 있습니다.
db.mycollection.find({"IMAGE URL":{"$ne":None}});
pymongo는 mongo “null”을 python “None”으로 표시하기 때문입니다.
답변
db.collection_name.find({"filed_name":{$exists:true}});
이 파일이 포함 된 문서를 가져옵니다.
내 제안 :
db.collection_name.find({"field_name":{$type:2}}) //type:2 == String
필수 속성 유형을 확인할 수 있습니다. 필드 유형이 일치하지 않는 경우 파일 유형을 확인하기 때문에 field_name이 조회 한 field_name에 값이 포함 된 모든 문서를 리턴합니다. 유형 조건이 일치하지 않으면 아무 것도 리턴되지 않습니다.
Nb : field_name에 “”을 의미하는 빈 문자열이 있으면 반환됩니다.
db.collection_name.find({"filed_name":{$ne:null}});
추가 검증 :
좋아, 아직 끝나지 않았으니 추가적인 조건이 필요하다.
db.collection_name.
find({ "field_name":{$type:2},$where:"this.field_name.length >0"})
또는
db.collection_name.
find({ "field_name":{$ne:null},$where:"this.field_name.length >0"})
답변
미래 독자를위한 공유.
이 쿼리는 우리에게 효과적 이었습니다 ( MongoDB compass 에서 실행 된 쿼리 ) :
{
"fieldName": {
"$nin": [
"",
null
]
}
}
답변
db.<collectionName>.find({"IMAGE URL":{"$exists":"true"}, "IMAGE URL": {$ne: null}})
답변
이상적인 경우에는 null , “” 또는 비어있는 세 가지 값 을 모두 테스트하려고 합니다 . (필드는 레코드에 존재하지 않음)
다음을 수행 할 수 있습니다.
db.users.find({$and: [{"name" : {$nin: ["", null]}}, {"name" : {$exists: true}}]})