2012-12-16 2 views
0

이 주제를 많이 검색했지만 완전히 잃어 버렸습니다. 여기에 (내가 mongojs와 Node.js를 사용하고 있습니다) 내 문제입니다 :mongojs : 배열 필드에 요소를 푸시

나는 문서의 종류가 싶습니다

{ 
    "_id" : ObjectId("50ce2f7f98fa09b20d000001"), 
    "beginTime" : 1355689855016, 
    "tags" : { 
     "primary": [ 29, 12, 16], 
     "secondary": [6, 8, 9] 
    }, 
    "user" : "50bdddc601de4681d666835f" 
} 

을하지만 아래의 예를 들어 새로운 태그를 밀어하려고하면 "차"그럼

tags = {}; 
tags[request.body.relevance] = request.body.tag; 
return db.activities.update({ 
    '_id': db.ObjectId(request.body.activity), 
    'user': request.session.user.id 
}, { 
    $push: { 
    tags: tags 
    } 
}); 

내가 얻을처럼 (이 필드는 변수에서 오는주의)

{ "_id" : ObjectId("50ce2f7f98fa09b20d000001"), "beginTime" : 1355689855016, "tags" : [ { "primary" : 29 }, { "primary" : "24" }, { "primary" : "1" } ], "user" : "50bdddc601de4681d666835f" } 

$ push (필드 o.o로 변환)를 중첩하는 것을 포함하여 다른 많은 변형을 시도했습니다. 어쨌든, 나는 항상 실패했다. 또한이 시점에서 나는 정말로 굶주리고있다. T_T

도와주세요. 감사.

+0

이 나에게 올바른 보인다. 어떻게 문서를 쿼리하고 있습니까? Mongo는 검색 가능한 배열을 분리합니다. –

+0

죄송합니다. "문서를 어떻게 쿼리하고 있습니까?" (내가 잊어 버린 데이터는 무엇입니까?) – Sovos

답변

1

$push 연산자의 값은 부모가 아닌 푸시 할 배열 필드 여야합니다.

에 한번이 아니라 :

... 
return db.activities.update({ 
    '_id': db.ObjectId(request.body.activity), 
    'user': request.session.user.id 
}, { 
    $push: { 
    'tags.primary': tags.primary, 
    'tags.secondary': tags.secondary 
    } 
}); 

UPDATE

동적으로이 작업을 수행하려면 당신이 뭔가를 할 필요가 :

... 
var push = {}; 
push['tags.' + request.body.relevance] = request.body.tag; 
return db.activities.update({ 
    '_id': db.ObjectId(request.body.activity), 
    'user': request.session.user.id 
}, { 
    $push: push 
}); 
+0

문제는 "기본"과 "보조"가 변수에 저장된다는 것입니다 (어떤 값이라도 가질 수 있음). 문제가 발생한 곳입니다. 변수에 저장되는 태그 속성을 고려하여 솔루션을 사용하는 방법을 보여 주시겠습니까? – Sovos

+0

@ user1662546 좋아요, 당신이 찾고 있다고 가정 한 결과로 업데이트했습니다. – JohnnyHK

+0

완벽하게 작동했습니다! 고마워요! – Sovos