programing

Mongo 클라이언트가 밑줄이 앞에 붙은 컬렉션에 액세스할 수 없음

stoneblock 2023. 6. 28. 21:17

Mongo 클라이언트가 밑줄이 앞에 붙은 컬렉션에 액세스할 수 없음

Mongo에서 밑줄이 있는 컬렉션의 이름을 지정했지만 셸에서 액세스할 수 없습니다.

meteor:PRIMARY> show collections
_assignments
chatmessages
(... other stuff)

첫 번째 컬렉션에서 함수를 실행하려고 하면 다음 오류가 발생합니다.

meteor:PRIMARY> db._assignments.find()
Thu Jun 19 10:53:28.450 TypeError: Cannot call method 'find' of undefined

그러나 다른 컬렉션은 정상적으로 작동합니다.

meteor:PRIMARY> db.chatmessages.find()
{ "room" : "j5oau9DJ6GNpT9nR8", "userId" : "at9Kt8NNL4aeof6LE", "text" : "@nomad943 can you take a look at event #1?", "timestamp" : 1391806611977, "_id" : "26GbXa6c4B65FYRxC" }
{ "room" : "T7JfjBhri48bNHAfQ", "userId" : "B82LxmPBZWDnN4N2p", "text" : "Thinking #60 should be deleted, it's a duplicate of #36 and the region is wrong for the province", "timestamp" : ISODate("2014-06-18T18:57:56.480Z"), "_id" : "29pKqPhi4hgxCb2Ky" }

이게 무슨 일입니까?

셸이 기본 도우미 구문으로 이 문제를 해결할 수 없다는 것 외에는 문제가 없습니다.셸에서 다음과 같은 이름의 컬렉션에 계속 액세스할 수 있습니다.

db.createCollection("_assignments")
{ "ok" : 1 }
db.getCollection("_assignments").find()
db.getCollection("_assignments").insert({ "a": 1 })
WriteResult({ "nInserted" : 1 })
db.getCollection("_assignments").find({ "a": 1 })
{ "_id" : ObjectId("53a36a4047234c4e9bb4feac"), "a" : 1 }

이것은 알려진 버그입니다.컬렉션 앞에 밑줄을 붙이지 마십시오.

https://jira.mongodb.org/browse/SERVER-445

집합 이름이 밑줄로 시작하는 경우에는 큰따옴표로 묶어야 합니다.(최소한 MongoDB 버전 4.x 이하에서는) 밑줄(_첫 번째 문자로)이 올바르게 해석되지 않으므로 따옴표(즉, 일반 문자열로 지정)로 묶어야 합니다. 예를 들어 다음은 작동하지 않습니다.

db._someCollection.find()

하지만 다음은 잘 작동합니다.

db.getCollection("_someCollection").find();

HTH

컬렉션 이름에 밑줄이 포함되어 있고 새 문서를 삽입하려면 다음과 같이 컬렉션을 변수에 할당하고 삽입에 사용해야 합니다.

var assignments = db.getCollection("_assignments")

assignments.insertOne(
   {
      room : "123",
      userId : "1",
      text : "text"
   }
)

서류 작성 후에

언급URL : https://stackoverflow.com/questions/24309685/mongo-client-cant-access-collections-prefixed-with-an-underscore