홈>
필드 이름에 도트를 사용하는 방법?
예시 오류가 나타납니다 :
db.test2.insert({ "a.a" : "b" })
can't have . in field names [a.a]
- 답변 # 1
- 답변 # 2
실제로 검색어에 점을 사용할 수 있습니다. 참조 : http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29
이 특수한 점 기호로 인해 필드 이름에 사용할 수 없습니다. 대부분의 프로그래밍 언어에서는 식별자에 점 기호를 사용할 수 없습니다.
db.test2.find({ "a.a" : "b" })
쿼리를 작성할 수 있습니다 그러나 이러한 쿼리를 작성하려면 다음과 같이 객체를 삽입해야합니다.db.test2.insert({"a": {"a": "b"}})
. 그러면 필드 이름이"a"
인 문서가 생성됩니다."a"
라는 필드를 포함하는 임베드 된 문서의 값 값이"b"
인 (다시) . - 답변 # 3
mongodb에서 나가는 데이터를 변환하는 pymongo 라이브러리를 사용하여 SONManipulator를 작성할 수도 있습니다. 단점이 있습니다. 성능에 영향을 미치며 (사용 사례에 따라 영향을 미침) 찾기를 사용하여 검색 할 때 키를 변환해야합니다.
KeyTransform 클래스의 주석에서 코드를 사용하는 방법에 대한 예제가있는 코드는 다음과 같습니다.
from pymongo.son_manipulator import SONManipulator class KeyTransform(SONManipulator): """Transforms keys going to database and restores them coming out. This allows keys with dots in them to be used (but does break searching on them unless the find command also uses the transform). Example & test: # To allow `.` (dots) in keys import pymongo client = pymongo.MongoClient("mongodb://localhost") db = client['delete_me'] db.add_son_manipulator(KeyTransform(".", "_dot_")) db['mycol'].remove() db['mycol'].update({'_id': 1}, {'127.0.0.1': 'localhost'}, upsert=True, manipulate=True) print db['mycol'].find().next() print db['mycol'].find({'127_dot_0_dot_0_dot_1': 'localhost'}).next() Note: transformation could be easily extended to be more complex. """ def __init__(self, replace, replacement): self.replace = replace self.replacement = replacement def transform_key(self, key): """Transform key for saving to database.""" return key.replace(self.replace, self.replacement) def revert_key(self, key): """Restore transformed key returning from database.""" return key.replace(self.replacement, self.replace) def transform_incoming(self, son, collection): """Recursively replace all keys that need transforming.""" for (key, value) in son.items(): if self.replace in key: if isinstance(value, dict): son[self.transform_key(key)] = self.transform_incoming( son.pop(key), collection) else: son[self.transform_key(key)] = son.pop(key) elif isinstance(value, dict): # recurse into sub-docs son[key] = self.transform_incoming(value, collection) return son def transform_outgoing(self, son, collection): """Recursively restore all transformed keys.""" for (key, value) in son.items(): if self.replacement in key: if isinstance(value, dict): son[self.revert_key(key)] = self.transform_outgoing( son.pop(key), collection) else: son[self.revert_key(key)] = son.pop(key) elif isinstance(value, dict): # recurse into sub-docs son[key] = self.transform_outgoing(value, collection) return son
- 답변 # 4
JsonObject에 삽입하기 전에 myString.replace ( ".", "\ u2024")를 사용하여 키 값을 교체했습니다.
- 답변 # 5
def remove_dots(data): for key in data.keys(): if type(data[key]) is dict: data[key] = remove_dots(data[key]) if '.' in key: data[key.replace('.', '\uff0E')] = data[key] del data[key] return data
이 재귀 적 방법은 dict의 키에서 모든 점 문자를\ uff0E로 바꿉니다. Fisk가 제안한대로
관련 자료
- python - 열 이름을 변수로 사용하는 방법은 무엇입니까?
- unreal 4 - Pitch, Roll 및 Yaw 대신 X, Y 및 Z를 사용하는 방법
- python - 이미지에 pyautogui를 사용하는 방법
- html - PHP 클릭 한 링크의 이름을 얻는 방법?
- swift - PublishersCombineLatest를 사용하여 게시자 1 명을 얻는 방법
- Sublime Text 3에서 Git Bash를 사용하는 방법
- swift - 함수 유형은 어떻게 사용합니까?
- ios - 신속한 사용법 또는 운영자
- (Android) SQL에서 변수를 사용하는 방법은 무엇입니까?
- javascript - 개미 디자인 양식 initialValue 사용 방법
- algorithm - 파이썬에서 무한대를 사용하는 방법
- java - 여기서 어설 션을 어떻게 사용합니까?
- fastify에서 ajv-i18n을 어떻게 사용할 수 있습니까?
- reactjs : mapstatetoprops에서 useParams를 사용하는 방법?
- keras - 텍스트 분류에 GPT 3를 어떻게 사용할 수 있습니까?
- python - pip로 설치할 때 git repo에서 py 스크립트를 사용하는 방법
- string - Ruby 변수 인수에서 "# {…}를 사용하는 방법?
- node.js - FFMPEG 및 노드에서 스트림을 사용하는 방법
- find -파인더의 "* py"이름
- php 8 - PHP에서 "Nullsafe 연산자"를 어떻게 사용할 수 있습니까?
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- JavaScript 변수를 HTML div에 '출력'하는 방법
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 화면에서 찾은 요소를 찾을 수없는 경우 셀레늄
필드 이름의 점 기호를
\uff0E
에 해당하는 유니 코드로 바꿀 수 있습니다.더보기 :
<올>http://docs.mongodb.org/manual/faq/developers/#faq-dollar-sign-escaping
http://docs.mongodb.org/manual/core/document/#dot-notation