2016-06-08 3 views
0

Meteor에서 mongo 콜렉션을 업데이트하는 데 문제가 있습니다.MeteorJS의 MongoDB 콜렉션에서 하위 문서 배열을 업데이트하는 방법

아마도 나는 단지 $addtoset이 어떻게 작동하는지 이해하지 못할 것입니다.

{ 
    _id: "bKXXrpYmppFBfq9Kx", 
    title: "This Is a Title", 
    body: "Blah Blah Blah Body Goes Here", 
    userId: "W9YEs84QFhZzJeB6j", 
    author: "Users Name", 
    timestamp: ISODate("2016-06-07T20:37:05.775Z"), 
    score: [ 
    { 
     userId: ""W9YEs84QFhZzJeB6j", 
     score: 1 
    } 
    ], 
    overallScore: 1, 
    votedOnBy: [ 
    "W9YEs84QFhZzJeB6j" 
    ], 
    timesVotedOn: 1 
} 
:

여기
var someUser = Meteor.users.findOne("W9YEs84QFhZzJeB6j"); 

var NewIdea = Ideas.insert({ 
    title: "This Is a Title", 
    body: "Blah Blah Blah Body Goes Here", 
    userId: someUser._id, 
    author: someUser.profile.name, 
    timestamp: new Date(now - 5 * 3600 * 1000), 
    score: [], 
    overallScore: 0, 
    votedOnBy: [], 
    timesVotedOn: 0 
}); 

내가 그것을 업데이트 후 같이 할 것입니다 :

은 여기 내 기본 문서, 더 많거나 적은 이것이 내가 내 프로젝트를 초기화 내 fixtures.js에서이다

업데이트 할 때 사용하는 코드는 다음과 같습니다 (작동하지 않음).

Ideas.update("bKXXrpYmppFBfq9Kx", { 
    $addToSet: {score: {userId: someUser._id, score: 1}}, 
    $inc: {overallScore: 1}, 
    $addToSet: {votedOnBy: someUser._id}, 
    $inc: {timesVotedOn: 1} 
}); 

여기에 (업데이트 후) 몽고 콘솔에서 실제 문서입니다 : 전혀 존재하지

{ 
    "_id" : "bKXXrpYmppFBfq9Kx", 
    "title" : "This Is a Title", 
    "body" : "Blah Blah Blah Body Goes Here", 
    "userId" : "W9YEs84QFhZzJeB6j", 
    "author" : "Users Name", 
    "timestamp" : ISODate("2016-06-07T20:37:05.775Z"), 
    "votedOnBy" : [ 
    "W9YEs84QFhZzJeB6j" 
    ], 
    "timesVotedOn" : 1 
} 

공지 사항 overallScore 있고 score.

저는 Meteor와 Mongo를 처음 접했습니다 (아마도 명백합니다). 아무도 내가 여기서 뭘 잘못하고 있는지 알아? 또는이 업데이트를 올바르게 수행 할 수 있도록 필요한 항목이 있습니까?

+0

감사 @Michel 플로이드, 당신은 데이터베이스 출력에서 ​​다른 비 필요한 정보를 제거 :이 문제를 해결하려면이 같은 update 물품. –

+0

귀하의 문제를 파악하기 위해 그 일을해야했습니다. 불행히도 귀하의 코드가 올바르게 보이기 때문에 솔루션이 여전히 누락되었습니다. –

답변

2

수정자를 개체로 사용하는 것이 중요합니다. 리터럴 다음 개체 : 키가 두 번 할당되기 때문에

{ a: 2, b: 2 } 

, 마지막 쓰기 승리 :

{ 
    a: 1, b: 1, 
    a: 2, b: 2 
} 

는 평가.

코드에서 동일한 아이디어가 $addToSet$inc 키에 적용됩니다. 그것은 훨씬 청소기입니다 :) 코드 편집에 대한

Ideas.update("bKXXrpYmppFBfq9Kx", { 
    $addToSet: { 
    score: { userId: someUser._id, score: 1 }, 
    votedOnBy: someUser._id 
    }, 
    $inc: { 
    overallScore: 1, 
    timesVotedOn: 1 
    } 
}); 
+0

도움을 주셔서 대단히 감사합니다. 내가 말한대로 내 코드를 수정했지만 데이터베이스에서 db.ideas.find()를 실행하면 빈 점수 객체가 생깁니다. https://git.io/voqLK –

+0

이것은 대부분의 데이터를 문서로 가져 오기 때문에 이것을 대답으로 받아 들일 것입니다. 그리고 그렇게하고 싶습니다. 나는 그것이 내 데이터베이스에 실제로 들어가는지를 확인할 수 없기 때문에 객체를 내 문서에 넣을 수 있는지 잘 모르겠습니다. 일단 내가 그 비트를 알아 내면, 나는 ur 대답을 수락 할 것이다. 코드를 수정하여 필요한 작업을 수행해야하는 경우이를 수행하고 대답을 수락합니다. 다시 고마워! –

+0

나는이 대답을 받아 들였습니다. 분명히 당신 말이 옳았 기 때문입니다. 너는 내 첫 번째 문제를 해결했다. 이제 나는 새로운 질문을 한 두 번째 문제가있다. http://stackoverflow.com/questions/37705040/how-to-return-subdocuments-from-an-object-in-an-array-with-meteor -and-mongodb –

관련 문제