programing

유성 앱에서 mongodb에 2열 고유 ID를 추가하려면 어떻게 해야 합니까?

starjava 2023. 7. 1. 07:57
반응형

유성 앱에서 mongodb에 2열 고유 ID를 추가하려면 어떻게 해야 합니까?

유성 앱의 기본 mongodb에 2열 고유 인덱스를 생성하려고 하는데 문제가 있습니다.기상 기록에서 아무것도 찾을 수가 없습니다.저는 크롬 콘솔에서 시도해봤습니다.저는 학기부터 시도해왔고 심지어 mongod를 inside.meteor의 /db/dir에 가리켜보기도 했습니다.

Collection.ensureIndex({first_id: 1, another_id: 1}, {unique: true});변주곡

유성 앱 몽고 컬렉션에서 중복 항목을 방지하고 싶습니다.

누가 이걸 알아냈는지 궁금해요?

저는 제 질문에 대답했습니다, 정말 바보군요.

난 이해했다.

  1. 유성 서버 시작

  2. 두 번째 터미널 및 유형 열기meteor mongo

그런 다음 인덱스를 만듭니다.예를 들어, 저는 엄지손가락을 치켜세우고 엄지손가락을 내리치는 유형의 시스템에 대한 기록을 위해 이것들을 했습니다.

db.thumbsup.ensureIndex({item_id: 1, user_id: 1}, {unique: true})
db.thumbsdown.ensureIndex({item_id: 1, user_id: 1}, {unique: true})

이제 수동이 아닌 수동으로 실행할 때 이러한 설정을 생성하는 부트스트랩 설치 설정을 알아내야 합니다.

수집._esureIndex(인덱스, 옵션)

유성 소스 코드 내부를 검색하는 중에 확인할 수 있는 바인딩을 발견했습니다.호출된 인덱스_ensureIndex단일 키 기본 인덱스의 경우 다음 예를 따를 수 있습니다.packages/accounts-base/accounts_server.jsMeteor에서 고유한 사용자 이름을 강제로 지정합니다.

Meteor.users._ensureIndex('username', {unique: 1, sparse: 1});

다중 키 "복합" 인덱스의 경우:

Collection._ensureIndex({first_id:1, another_id:1}, {unique: 1});

이전 코드를 서버 측에 배치하면 인덱스가 설정됩니다.

경고

공지사항 _보증인덱스 구현 주의:

나중에 실제로 인덱스 API를 설계할 것입니다.지금은 Mongo's로 넘어가지만 동시에 진행됩니다.

문서에 따르면 "미니몽고는 현재 인덱스를 가지고 있지 않습니다.이것은 곧 올 것입니다."컬렉션에서 사용할 수 있는 방법을 보면, 다음과 같은 방법이 없습니다.ensureIndex.

실행할 수 있습니다.meteor mongo서버 측 인덱스를 활성화하지만 수집 개체는 여전히 해당 인덱스에 대해 알지 못합니다.따라서 이 앱을 통해 수집 캐시에 여러 인스턴스를 추가할 수 있지만 서버 측에서는 추가 삽입이 자동으로 실패합니다(오류가 출력에 기록됨).하드 페이지 새로 고침을 수행하면 앱이 서버와 다시 동기화됩니다.

따라서 현재로서는 다음과 같은 방법을 사용하는 것이 최선일 것입니다.

var count = MyCollection.find({first_id: 'foo', another_id: 'bar'}).count()
if (count === 0)
    MyCollection.insert({first_id: 'foo', another_id: 'bar'});

이것은 분명히 이상적이지 않지만, 잘 작동합니다.서버의 mongodb에서 인덱싱을 활성화할 수도 있으므로, 경쟁 조건의 경우에도 실제로 중복 레코드를 얻을 수 없습니다.

Smartpackage alded:collection2는 고유 인덱스와 스키마 유효성 검사를 지원합니다.유효성 검사는 서버와 클라이언트 모두(반동적으로) 발생하므로 클라이언트의 오류에 대응할 수 있습니다.

실제로 Meteor가 있는 서버에서 upsert를 사용하는 것은 어떻습니까?ts: // Server Only를 사용하여 추적할 수도 있습니다.

Meteor.methods({
 add_only_once = function(id1,id2){
   SomeCollection.update(
     {first_id:id1,another_id:id2},{$set:{ts:Date.now()}},{upsert:True});
 }
});

의뢰인

Meteor.call('add_only_once',doc1._id, doc2._id);

서버에서 실행 중인 실제 코드

if(Meteor.is_server) {
    Meteor.methods({
        register_code: function (key,monitor) {
             Codes.update({key:key},{$set:{ts:Date.now()}},{upsert:true});
        }
     ...

언급URL : https://stackoverflow.com/questions/10167604/how-can-i-add-a-two-column-unique-id-to-the-mongodb-in-a-meteor-app

반응형