사용자를 이름으로 검색하려면 속성이 firstName
및 lastName
입니다. 내가 재산을 가지고 있다면 fullName
이것은 사소한 것이지만 나는 그것을 가지고 있지 않다.2 개의 텍스트 필드를 1 개의 필드로 검색하십시오.
"Peter Robert"를 검색하려고하는데 검색하기 전에 2 개의 필드를 하나로 결합해야합니다.
어떻게해야합니까?
사용자를 이름으로 검색하려면 속성이 firstName
및 lastName
입니다. 내가 재산을 가지고 있다면 fullName
이것은 사소한 것이지만 나는 그것을 가지고 있지 않다.2 개의 텍스트 필드를 1 개의 필드로 검색하십시오.
"Peter Robert"를 검색하려고하는데 검색하기 전에 2 개의 필드를 하나로 결합해야합니다.
어떻게해야합니까?
기본적으로 원하는 소리는 "text search"입니다.
db.collection.ensureIndex({ "firstName": "text", "lastName": "text" })
db.collection.find({ "$text": { "$search": "Peter Robert" } })
이 처리하는 한 가지 방법입니다 : Text indexes 입력 용어가 모든 색인 필드에서 검색 될 수 있도록 여러 분야에 걸쳐 걸쳐 수 있습니다. 다른 경기도 반환하지만 정확한 경기는 최고 점수이므로 순위를 매길 수 있습니다.
또는, 당신은 당신이 항상 "분할"을 입력 토큰 화 할 수 있습니다 당신은 항상 다음 순서로 "피터 로버트"와 같은 문자열을 얻고 알고있는 경우 : 모든 아주 기본적인
var input = "Peter Robert";
var parts = input.split(/ /); // splits on space
db.collection.find({
"firstName": parts[0],
"lastName" parts[1]
])
합니다. 심지어 믹스에 $regex
및 $or
연산자를 적용
var input = "Peter Robert";
var regexStr = input.split(/ /).join("|"); // make it like "Peter|Robert"
db.collection.find({
"$or": [
{ "firstName": { "$regex": regexStr } },
{ "lastName": { "$regex": regexStr }}
]
})
솔직히, 당신도 $where
연산자와 자바 스크립트와 함께이 작업을 수행 할 수 있습니다. 아니 조건이 모든 문서에 대해 평가하는 것이기 때문에 비록 최고 :
db.collection.find(function(){
return (this.firstName + " " + this.lastName) == "Peter Robert";
})
은 아마 비록 통합 프레임 워크 조금 더 나은 재생 :이 작업을 수행하는
db.collection.aggregate([
// Borrow something from above to get "might" match documents
{ "$match": {
"$or": [
{ "firstName": { "$regex": regexStr } },
{ "lastName": { "$regex": regexStr }}
]
}},
// Then project a "fullName"
{ "$project": {
"firstName": 1,
"lastName": 1,
"fullName": { "$concat": [ "$firstName", " ", "$lastName" ] }
}},
// Match on the fullName value
{ "$match": { "fullName": input } }
])
많은 방법을. "텍스트 검색"과 집계 및 "JavaScript 쿼리"와 같은 서버 측 연산을 처리 할 수있는 여러 가지 방법이 모두 있기 때문에 프레임 워크 (클라이언트에서 Mongo 함수를 "에뮬레이트"하는 것과 같은)에 제한되지 않습니다. 서버 로직 코드.
귀하의 질문이 방금 편집되었으며 유성 태그가 제거되었습니다. 어느 쪽을 사용하고 있습니까? 유성이나 몽구스? 둘 다 가지지 않을거야. –
나는 Meteor를 사용하고 있으며 일부 Meteor 개발자는 과거에 이런 질문을했을 수도 있습니다. –
이전에 편집자가 태그를 삭제 한 것을 본 이후로 주로 물었습니다. 또한이 솔루션의 "일부"는 "서버"기반의 "minimongo"와 같은 것으로 즉시 변환되지 않기 때문에. 항상 코드 서버 측을 실행하여 메소드를 공개 할 수 있습니다. 이것을하는 많은 다른 방법. –