2010-08-08 3 views
2

Node.js와 함께 mongodb를 사용하는 웹 소켓 서버를 구축하고 있습니다.Mongo JSON 문서 -> JSON -> BSON

mongo db에 액세스하기 위해 node-mongodb-native를 라이브러리로 사용하고 있습니다.

그래서 ID를 추측하고
{ _id: { id: 'L?#&\u008e\u00ad\u000e\u008f\u0014\u0005\u0000\u0000' } 
, y: 3 
, favorite_color: 'orange' 
, x: 14766 
} 

는 BSON 개체 ID는 다음과 같습니다 제가 DB에서 개체에 CONSOLE.LOG에게 (sys.inspect (항목))를 호출 할 때

나는 다음과 같다 뭔가를 얻을 수 몽고가 사용합니다.

JSON을 사용하여 클라이언트 웹 브라우저에이 객체를 보내고, 객체를 가져 와서 서버로 다시 보내야합니다.

{"_id":"4c3f23268ead0e8f14050000","y":3,"favorite_color":"orange","x":14766} 

그래서 ID가 약간의 진수 인코딩 된 문자열로 전환되었습니다

I JSON.stringify (항목), I는 다음과 같습니다 뭔가를 얻을

. 클라이언트로 보내면 클라이언트가 다시 보냅니다. 이제 db로 업데이트해야합니다. 나는 JSON.parse (항목)이 정상적인 개체로 얻을 실행,하지만 여전히 다음과 같습니다

{ _id: '4c3f23268ead0e8f14050000' 
, y: 3 
, favorite_color: 'orange' 
, x: 14766 
} 

그 _id는 MongoDB를에서 찾아 볼 수 없습니다.

mongo에서 조회에 사용할 수있는 형식으로 다시 변환하려면 어떻게해야합니까? --update--

흥미롭게 나는 문서를 얻을 수 findOne({_id:item._id}, collection)를 사용할 수 있지만, 나는이 작업을 수행 할 경우 :

findOne({_id:{id : item._id.id}}, collection)

나는 결과가 나타나지 않습니다. 나는 mongo _id 객체에 특별한 것이 있다고 생각한다.

모두 {_id:item._id}

과 같이 밖으로 버려진 {_id:{id : item._id.id}} : 해결

{ _id: { id: 'L?#&\u008e\u00ad\u000e\u008f\u0014\u0005\u0000\u0000' } } 

--Another 업데이 트를 ---

는 통합 테스트 파일에 일부 개체 ID 조작이 있었다.

objectId = new mongo.ObjectID.createFromHexString ('47cc67093475061e3d95369'); 은 내가 찾고있는 _id를 제공합니다.

objectId.toHexString() '47cc67093475061e3d95369d'

+0

그래서, 문제는 내가 추측 해결? – Aillyn

+0

아니, 진짜 문제는 클라이언트가 mongodb에서 객체를 검색하는 데 사용할 수있는 클라이언트를 다시 보낼 수있는 클라이언트 브라우저 (바람직하게는 json)에 보낼 수있는 mongo id 형식이 필요하다는 것입니다. – RobKohr

답변

1

내 생각은 sys.inspectid 속성을 포함하는 객체로 ObjectId을 해석하는처럼 보이는 16 진수 문자열을 반환합니다. 그것은 당신이 덤프에서보고있는 것입니다.

MongoDB는 ObjectId를 개체가 아닌 12 바이트의 이진 값으로 처리합니다. 따라서 MongoDB는 id 속성에 대해 알지 못합니다.다음 쿼리는 어떤 결과를 얻을 수 없습니다 이유 :

findOne({_id: {id: item._id.id}}, collection) 

다음이하는 일, 그냥 바이너리 값으로 두 값을 모두 취급 같이

findOne({_id: item._id}, collection) 
+0

고마워요. 이제 훨씬 더 의미가 있습니다. 해당 개체를 문자열 또는 더 이식 가능한 데이터 형식으로 변환 한 다음 다시 변환 할 수있는 방법이 있습니까? 개체를 식별하기 위해 다시 보낼 수있는 클라이언트 브라우저에 보낼 것이 필요합니다. – RobKohr

+0

'4c3f23268ead0e8f14050000' 형식을 클라이언트에 보내야합니다. 이것은 ObjectId의 표준 텍스트 표현 인 것 같습니다. Mongo 셸에서 [toString()] (http://api.mongodb.org/java/current/org/bson/types/ObjectId.html#toString%28%29) 메서드는 이러한 문자열을 반환합니다. 나는 이것이 node-mongodb-native/node.js에서도 구현 될 것으로 기대한다. –

+0

도움 주셔서 감사합니다! 라이브러리의 일부로 비슷한 것을 사용할 수있었습니다. – RobKohr

관련 문제