2016-06-17 6 views
2

MongoDB에서 ID으로 내 기록을 필터링하는 데 너무 열심히 노력했습니다.MongoDB from MLab : ID로 찾기 ID가 작동하지 않습니다.

 mycollection.find({_id:"57603891dcba0f7813102b3f"},{},{},function(err, docs) { 
    console.log("record"+docs); 
    docs.each(function(err, doc) { 
     if(doc) { 
     console.log("record"+doc); 
     } 
    }); 
    }); 

거기에 어떤 문제가 :

{ 
    "_id": { 
     "$oid": "57603891dcba0f7813102b3f" 
    }, 
    "age": 10, 
    "name": "john", 
    "answer": "3", 
} 

스크립트으로 : 문제는 내 기록이 어떻게 MLAB$ OID

가 함께? 어떤 생각들이 있니?

답변

0

는 다음과 같은 시도 : -

mycollection.find({"_id.$oid":"57603891dcba0f7813102b3f"},{},{},function(err, docs) { 
console.log("record"+docs); 
docs.each(function(err, doc) { 
    if(doc) { 
    console.log("record"+doc); 
    } 
}); 
    }); 
+0

여전히 MLab 연결로 작동하지 않습니다. –

6

스크립트와 문제는 당신이 Node.js를를 사용하는 경우 ObjectId가 문자열

{ 
     "$oid": "57603891dcba0f7813102b3f" 
}, 

와 일반 문자열 "57603891dcba0f7813102b3f"을 비교하려고하는 것입니다 , 할 수있는 것은 다음과 같습니다

1) mongodb 패키지에서 ObjectId API 가져 오기

01 23,

2)

mycollection.find({_id:ObjectId("57603891dcba0f7813102b3f")},{},{},function(err, docs) {...} 

가, BTW titi23 @ 게시 한 대답은 또한 작동 조회에서 ObjectId가에 일반 문자열을 변환합니다. 그러나 ObjectId 변환은 더 깨끗한 접근 방식입니다.

+0

이 작업은 로컬 mongoDb 설치에서는 가능하지만 MLab 연결에서는 작동하지 않습니다. 반환 값으로 널 값을 가지고 있습니다 ... –

+0

mLab 인스턴스의 샘플 데이터를 공유 할 수 있습니까? –

+0

샘플 문서 내가 질문에 표시 한 것입니다 : { "_id": { "$의 OID": "57603891dcba0f7813102b3f" }, "나이": 10, "이름": "존", " answer ":"3 ", }. mlab에 삽입 된 새 문서는 $ oid로 포맷됩니다. –

1

이렇게하면 mLab에서 검색 할 수 있습니다. 해당 지역의 개발 MongoDB를 서버에서

{ 
    "_id": { 
     "$oid": "59b59b34852a9619b486634f" 
    } 
} 

하지만 당신의 자바 스크립트 코드가 있어야

uId = ObjectId("59b59b34852a9619b486634f") 
User.findOne({"_id": uId}, function(err, user){ 
}); 
0

는 "_id"는 OBJECTID를 사용하여 색인 및 식별 ("..."). MLAB 또는 원격 MongoDB를 서버에 쿼리하는 동안 예를 들어, 로컬 쿼리 할 때 당신이

{ "_id": ObjectID("....") , "name": ".......", "password" : "............"} 

을받을 수는 "_id"는 "$의 OID"로 참조됩니다. 당신이 나 같은 경우 예를 들어,

{ "_id": { "$oid": "..........."} , "name": "......."} 

, 당신은 MLAB에서 문서의 "_id"를 편집하고 MLAB는 당신이 그런 것을 허용하지 않을 것이다, 후자와 전자 기술을 대체하려고 할 수 있습니다, 난 그 생각 그 제한의 일부. 시도해보고 공유 할 수있는 대안이 있는지 확인하십시오.