복붙노트

[MONGODB] 하위 문서에 Nodejs 몽고 삽입 - 동적 필드 이름

MONGODB

하위 문서에 Nodejs 몽고 삽입 - 동적 필드 이름

{사용자 이름 : '나'기업 : { "yourcompany와": {...}}

나는 사용자 레코드 (사용자 컬렉션)에 회사를 삽입 할, 만들려면 :

{사용자 이름 : '나'기업 : { "yourcompany와": {...}, "mycompany": {...}}

그러나 이름은 동적입니다 ..

var companyid = "mycompany";

.collection('users').findAndModify(
{username: usern}, 
[['_id', 'asc']], 
{$set:{companies:{companyid: { desksmemberships:[] }}}},    
{new: true}, function(){...}

이것은 제공합니다 .. {사용자 이름을 '나'기업 : { "yourcompany와": {...}, "회사 ID": {...}}

이걸 어떻게해야합니까?

해결법

  1. ==============================

    1.당신은 프로그래밍 방식 $ 세트 수정을 구축해야 할 것이다 :

    당신은 프로그래밍 방식 $ 세트 수정을 구축해야 할 것이다 :

    var modifier = { $set: {} };
    modifier.$set['companies.' + companyid] = { desksmemberships:[] };
    

    그리고 다음 findAndModify 호출에서 세 번째 매개 변수로 수정 ​​사용합니다.

    또한 배열 대신에 포함 된 개체로 회사를 변경하는 것이 좋습니다.

    Node.js를 4.x의 업데이트

    이제 직접 객체 리터럴에서이 작업을 수행하는 계산 된 속성 구문을 사용할 수 있습니다 :

    collection('users').findAndModify(
        {username: usern}, 
        [['_id', 'asc']], 
        {$set:{['companies.' + companyid]: { desksmemberships:[] }}},    
        {new: true},
        function(){...});
    
  2. ==============================

    2.나는 꽤 많은 게시물에이 질문에, 그들 중 일부는 매우 컴플렉스 전화 나 미친하지만 당신은이 작업을 수행 할 수 있습니다 (노드 + 몽고)를 본 적이 :

    나는 꽤 많은 게시물에이 질문에, 그들 중 일부는 매우 컴플렉스 전화 나 미친하지만 당신은이 작업을 수행 할 수 있습니다 (노드 + 몽고)를 본 적이 :

    내 DB 스키마 '일치'는 배열로 설정됩니다. 몽고 데이터에 [match.matchId]을 '2028856183'이된다.

    db.update({key: value}, {matches: [{[match.matchId] : match}] }, callback);
    db.update(what to find, what to change it to, what to do next)
    

    당신은 괄호 안에 어떤 변수를 사용할 수 있습니다.

  3. from https://stackoverflow.com/questions/12184626/nodejs-mongo-insert-into-subdocument-dynamic-fieldname by cc-by-sa and MIT license