나는 같은
var mywords = ["cat", "dog", "fish"]
을 문자열 배열을하고 '단어'수집이라는 MongoDB를 수집 (로를 upsert하는 절차를 쓰고 있어요). 각 단어가 컬렉션에 몇 번 삽입되었는지 계산하고 싶습니다. 일부 단어는 이미 모음집에 있고 일부는 그렇지 않은 것일 수 있습니다.
이 작동 :
var my_func = function(mywords) {
//Get connection to db...
mywords.forEach(function(word) {
collection.update({name: word}, {$inc: {count: 1}}, {upsert: true});
});
}
신난다. 이제 {name : dog, count : 3}이 컬렉션의 유일한 문서이고 my_func ([ "cat", "dog", "fish"])를 실행하면 컬렉션에 이제 다음이 포함됩니다.
이것은 정확히 내가 한 가지 업데이트로이 모든 작업을 수행하려는 경우를 제외하고는 원하는 것입니다. forEach 내에서가 아니라. 난 단지가 들어있는 같은 모음으로 시작하는 경우, 그러나
var broken_func = function(mywords) {
//Get connection to db...
collection.update({name: {$in : {mywords}}, {$inc: {count: 1}}, {upsert: true, multi:true});
}
{이름 : 개, 수 : 3} 실행 my_func ([ "고양이", "개", "물고기"])이 시도 , 내 컬렉션은 다음과 같습니다
{name: dog, count: 3}
{count: 1}
나는 MongoDB를가 mywords 배열의 문자열이있는 문서의 이름 필드를 일치 해당 문서의 카운트 필드를 증가합니다. mywords에 일부 문자열과 동일한 문서 이름 필드가 없으면 {name : "stringFrom_mywords", count : 1} 문서를 만듭니다.
내가 원하는 것은 가능한 일이며 원하는 행동을 어떻게 달성 할 수 있습니까? forEach를 사용하고 별도의 업데이트를 수행하는 것이 비효율적이라고 생각합니다. 이 정보가 유용하다면 node.js MongoDb 드라이버를 사용하고 있습니다. 내 문제는이 루비 질문과 비슷하다는 것을 알고 있습니다 Upsert Multiple Records with MongoDb
나는 당신이하고있는 것과 매우 비슷한 것을 시도하고 있습니까? $ in 배열의 여러 문서를 업저 레이트 할 수 없다면 어떤 해결책을 찾았습니까? –