복붙노트

[MONGODB] 몽구스 통해 몽고 배열 푸시 상품

MONGODB

몽구스 통해 몽고 배열 푸시 상품

그래서 좋은 답을 찾고 비트가 흐르고했지만 나는 확실히 내가 난 후 무엇을 설명하는 올바른 단어를 잃었어요 있다고 해요.

기본적으로 나는 MongoDB를 수집 호출 한 '사람' 다음과 같이 해당 모음의 스키마는 다음과 같습니다

people: {
         name: String, 
         friends: [{firstName: String, lastName: String}]
        }

지금, 나는 데이터베이스에 연결하는 아주 기본적인 표현 응용 프로그램이 성공적으로 비어있는 친구의 배열과 '사람'을 만듭니다.

응용 프로그램의 보조 대신에, 한 형태 친구를 추가하는 장소입니다. 이 양식은 또한 적절한 사람 개체에 대한 참조의 이름 필드에 이름 및 성 다음 게시물합니다.

그때 새로운 친구 객체를 만드는 일을 힘든 시간을 보내고하고있어 어떤 친구의 배열을 "밀어".

나는이 몽고 콘솔을 통해이 작업을 수행 할 때이 조회 기준 후 내 두 번째 인수로 $ 푸시로 업데이트 기능을 사용하는 것이 알지만, 몽구스가이 일을 얻을 수있는 적절한 방법을 찾을 수 없습니다.

db.people.update({name: "John"}, {$push: {friends: {firstName: "Harry", lastName: "Potter"}}});

최신 정보: 그래서, 아드리안의 대답은 매우 도움이되었다. 다음은 내 목표를 달성하기 위해 한 일이다.

내 app.js 파일에, 내가 사용하는 임시 경로를 설정

app.get('/addfriend', users.addFriend);

어디에 내 users.js에 내가 가진 파일

exports.addFriend = function (req, res, next)
{
var friend = {"firstName": req.body.fName, "lastName": req.body.lName};
Users.findOneAndUpdate({name: req.user.name}, {$push: {friends: friend}});
};

해결법

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

    1.가정, VAR 친구 = {firstName을 '해리',이 lastName '포터'};

    가정, VAR 친구 = {firstName을 '해리',이 lastName '포터'};

    당신은 두 가지 옵션이 있습니다 :

    메모리 모델을 업데이트하고 (일반 자바 스크립트 사항 Array.push)을 저장합니다 :

    person.friends.push(friend);
    person.save(done);
    

    또는

    PersonModel.update(
        { _id: person._id }, 
        { $push: { friends: friend } },
        done
    );
    

    나는 항상 시도하고 가능한 경우는 몽구스 당신에게 (후크, 검증 등)를 제공하는 것이 더 이익의 존중 것이기 때문에, 첫 번째 옵션에 대한 이동합니다.

    그러나 동시 쓰기를 많이하고 있다면, 당신은 당신이 전체 모델마다 교체하고 추가 이전 친구를 잃는에서 당신을 중지 불쾌한 버전 오류하게 될 겁니다 경쟁 조건에 타격을 줄 것으로 예상된다. 그것은 절대적으로 필요한 때 그래서에만 전자로 이동합니다.

  2. ==============================

    2.

    { $push: { <field1>: <value1>, ... } }
    

    대답은 위의 모든 요구 사항을 충족하지만, 나는 다음을 수행하여 작업있어

    var objFriends = { fname:"fname",lname:"lname",surname:"surname" };
    Friend.findOneAndUpdate(
       { _id: req.body.id }, 
       { $push: { friends: objFriends  } },
      function (error, success) {
            if (error) {
                console.log(error);
            } else {
                console.log(success);
            }
        });
    )
    
  3. ==============================

    3.업데이트 문서에 $ 푸시를 사용하여 배열 내부에 새 값을 삽입합니다.

    업데이트 문서에 $ 푸시를 사용하여 배열 내부에 새 값을 삽입합니다.

    발견:

    db.getCollection('noti').find({})
    

    찾기 검색 결과 :

    {
        "_id" : ObjectId("5bc061f05a4c0511a9252e88"),
        "count" : 1.0,
        "color" : "green",
        "icon" : "circle",
        "graph" : [ 
            {
                "date" : ISODate("2018-10-24T08:55:13.331Z"),
                "count" : 2.0
            }
        ],
        "name" : "online visitor",
        "read" : false,
        "date" : ISODate("2018-10-12T08:57:20.853Z"),
        "__v" : 0.0
    }
    

    최신 정보:

    db.getCollection('noti').findOneAndUpdate(
       { _id: ObjectId("5bc061f05a4c0511a9252e88") }, 
       { $push: { 
                 graph: {
                   "date" : ISODate("2018-10-24T08:55:13.331Z"),
                   "count" : 3.0
                   }  
               } 
       })
    

    업데이트 결과 :

    {
        "_id" : ObjectId("5bc061f05a4c0511a9252e88"),
        "count" : 1.0,
        "color" : "green",
        "icon" : "circle",
        "graph" : [ 
            {
                "date" : ISODate("2018-10-24T08:55:13.331Z"),
                "count" : 2.0
            }, 
            {
                "date" : ISODate("2018-10-24T08:55:13.331Z"),
                "count" : 3.0
            }
        ],
        "name" : "online visitor",
        "read" : false,
        "date" : ISODate("2018-10-12T08:57:20.853Z"),
        "__v" : 0.0
    }
    
  4. ==============================

    4.그렇게하는 쉬운 방법은 다음을 사용하는 것입니다 :

    그렇게하는 쉬운 방법은 다음을 사용하는 것입니다 :

    var John = people.findOne({name: "John"});
    John.friends.push({firstName: "Harry", lastName: "Potter"});
    John.save();
    
  5. ==============================

    5.나뿐만 아니라이 문제에 달렸다. 내 수정 자식 스키마를 만드는 것이 었습니다. 당신의 모델에 대한 예는 아래를 참조하십시오.

    나뿐만 아니라이 문제에 달렸다. 내 수정 자식 스키마를 만드는 것이 었습니다. 당신의 모델에 대한 예는 아래를 참조하십시오.

    ---- 사람 모델

    const mongoose = require('mongoose');
    const SingleFriend = require('./SingleFriend');
    const Schema   = mongoose.Schema;
    
    const productSchema = new Schema({
      friends    : [SingleFriend.schema]
    });
    
    module.exports = mongoose.model('Person', personSchema);
    

    *** 중요 : SingleFriend.schema은 -> ​​스키마를 사용 소문자로 확인

    --- 아이 스키마

    const mongoose = require('mongoose');
    const Schema   = mongoose.Schema;
    
    const SingleFriendSchema = new Schema({
      Name: String
    });
    
    module.exports = mongoose.model('SingleFriend', SingleFriendSchema);
    
  6. from https://stackoverflow.com/questions/33049707/push-items-into-mongo-array-via-mongoose by cc-by-sa and MIT license