>  기사  >  데이터 베이스  >  MongoDB 문서 업데이트(php 코드 예시)

MongoDB 문서 업데이트(php 코드 예시)

齐天大圣
齐天大圣원래의
2020-08-24 14:39:332353검색

MongoDB 업데이트 문서는 두 가지 범주로 나뉩니다.

  • 문서 교체, 기존 문서를 새 문서로 완전히 교체

  • 수정자, 일부 문서 수정

문서 교체

문서 교체 사용 매우 간단합니다. 데모를 살펴보겠습니다.

$collect->insertOne(['name' => 'lakers', 'nums'=> 16]);
$collect->replaceOne(
    ['name'=>'lakers'], 
    ['name' => 'heat', 'nums'=>3]
);

수정자를 사용하여 키 수정, 추가 또는 삭제와 같은 더 복잡한 업데이트 작업을 완료하세요.

"$set" modifier

"$set"은 필드 값을 지정하는 데 사용됩니다. 이 필드가 없으면 작성하십시오.

$collect->insertOne([
    'name' => 'james',
    'age' => 35,
]);

$collect->updateOne(['name'=>'james'],
    ['$set' => ['fruit' => 'apple']]
);
// fruit字段不存在,则会创建该字段

지금 사과가 마음에 들지 않고 딸기로 바꾸고 싶다면

$collect->updateOne(['name'=>'james'],
    ['$set' => ['fruit' => 'strawberry']]
);

"$set"으로 키 유형을 수정할 수도 있습니다.

# 不止喜欢草莓,还喜欢梨子、香蕉。
$collect->updateOne(['name'=>'james'],
    ['$set' =>
        ['fruit' => 
            ['strawberry', 'banana', 'pear'] 
        ]
    ]
);

"$set"은 포함된 문서도 수정할 수 있습니다

$collect->insertOne([
    'name' => 'james',
    'age' => 35,
    'brothers' => ['name' => 'wade', 'age'=> 38]
]);

$collect->updateOne(['name'=>'james'],
    ['$set' =>
        ['brothers.name' => 'paul']
    ]
);

"$unset" 수정자

"$unset" 수정자를 사용하여 지정된 필드를 삭제하세요

$collect->updateOne(['name'=>'james'],
    ['$unset' =>
        ['brothers' => '']
    ]
);

"$inc" 수정자, 증가 또는 감소 값

"$set" 수식어와 동일하며 해당 필드가 없으면 자동으로 생성됩니다. 참고: 이 필드 값은 숫자만 사용할 수 있습니다.

$collect->updateOne(['name'=>'james'],
    ['$inc' =>
        ['scores' => 61]
    ]
);
## 现有积分61

이제 10포인트가 적립되었습니다.

$collect->updateOne(['name'=>'james'],
    ['$inc' =>
        ['scores' => 10]
    ]
);
## 现有积分71

나중에 50포인트 다 써버렸어요

$collect->updateOne(['name'=>'james'],
     ['$inc' =>['scores' => -50]
 ] ); 
 ## 现有积分21

Array Modifier

MongoDB에서는 배열에 대한 특별한 수정 방법을 제공합니다.

"$push"는 요소를 추가합니다

"$push"는 배열에 요소를 추가할 수 있습니다. 배열이 존재하지 않으면 배열이 자동으로 생성됩니다. 이제 기사 데이터를 저장하는 데 사용되는 문서가 있습니다.

$collect->insertOne([
     '_id' => 1,      
     'title'=>'study mongodb',      
     'create_time' => '2020-08-24 12 :31' 
]); 
$push = ['$push' => ['comments' => 'comments1'] ]; 
$collect->updateOne(['_id' => 1 ], $push);

"$each"는 여러 요소를 추가합니다

'$push'는 한 번에 여러 요소를 추가하려면 다음을 수행해야 합니다. '$each'를 함께 사용하세요.

$push = [    
     '$push' => 
         ['comments' => 
             ['$each' => ['comment1', 'comment2', 'comment3']]
         ] 
      ]; 
$collect->updateOne(['_id' => 1 ], $push);

"$slice"는 n개의 요소를 유지합니다.

'$push'와 '$slicet'은 최신 n개의 데이터를 유지하기 위해 함께 사용됩니다. '$slice'의 값은 음의 정수만 될 수 있습니다. . 예를 들어, 최근 댓글 3개만 유지하고 싶습니다.

# 目前数据如下
 > db.users.find() 
{ "_id" : 1, "title" : "study mongodb", "create_time" : "2020-08-24 12:31", "comment" : [ "comment1", "comment2", "comment3", "comment4", "comment5", "comment6" ] }
$push = [
     '$push' => [ 
        'comment' => [ 
            '$each' => ['comment7', 'comment8', 'comment9'],                                '$slice' => -3 
        ],
     ], 
]; 
$collect->updateOne(['_id' => 1 ], $push);
# 现数据如下 
db.users.find() 
{ "_id" : 1, "title" : "study mongodb", "create_time" : "2020-08-24 12:31", "comment" : [ "comment7", "comment8", "comment9" ] }

"$sort" sorting

을 '$sort'와 함께 사용하면 좋아요가 가장 많은 댓글 3개를 유지할 수도 있습니다.

# 目前是集合内是空的,么有任何文档
$collect->insertOne(['_id' => 1, 'title'=>'study mongodb', 'create_time' => '2020-08-24 12:31']);
$push = [
    '$push' => [
        'comment' => [
            '$each' => [
                ['comment' => 'php', 'like' => 100], 
                ['comment' => 'mysql', 'like' => 10], 
                ['comment' => 'linux', 'like' => 200], 
                ['comment' => 'java', 'like' => 1000], 
                ['comment' => 'nginx', 'like' => 300], 
                ['comment' => 'composer', 'like' => 500], 
            ],
            '$slice' => -3,
            '$sort' => ['like' => 1]
        ],
    ],
];

컬렉션의 데이터가 어떻게 보이는지 살펴보겠습니다.

> db.users.find()
{ "_id" : 1, "title" : "study mongodb", "create_time" : "2020-08-24 12:31", "comment" : [ { "comment" : "nginx", "like" : 300 }, { "comment" : "composer", "like" : 500 }, { "comment" : "java", "like" : 1000 } ] }

"$push"와 함께 "$slice" 또는 "$sort"만 사용할 수 없으며 "$each"를 사용해야 합니다. .

"$addToSet"은 중복 데이터 삽입을 방지합니다

"$addToSet"을 사용하여 새 배열 요소를 추가할 때

$collect->insertOne([
    '_id' => 1,
    'name' => 'gwx', 
    'age' => 30, 
    'fruits' => ['apple', 'pear']
]);

$update = [
    '$addToSet' => [
        'fruits' => 'apple'
    ]
];

와 같은 중복 데이터 추가를 방지할 수 있습니다. 위의 수정은 Apple이 이미 성공하지 못하기 때문입니다 존재합니다. '$addToSet'은 "$each"와 함께 사용하여 여러 배열 요소를 삽입할 수도 있습니다.

$update = [
    '$addToSet' => [
        'fruits' => [
            '$each' => ['apple', 'banana', 'orange']
        ]
    ]
];
$collect->updateOne(['_id' => 1], $update);

요소 삭제

"$pop"을 통해 가장 왼쪽 또는 가장 오른쪽 요소를 삭제할 수 있습니다.

$collect->insertOne([
    '_id' => 1,
    'name' => 'gwx', 
    'age' => 30, 
    'fruits' => ['apple', 'pear']
]);

#从数组末删除1个元素
$update = [
    '$pop' => [
        'fruits' => 1
    ]
];
$collect->updateOne(['_id' => 1], $update);

# 从数组头删除一个元素
$update = [
    '$pop' => [
        'fruits' => -1
    ]
];
$collect->updateOne(['_id' => 1], $update);

'$pull'을 통해 지정된 요소를 삭제할 수도 있습니다.

$collect->insertOne([
    '_id' => 1,
    'name' => 'gwx', 
    'age' => 30, 
    'fruits' => ['apple', 'pear', 'apple', 'banana', 'orange']
]);

#从数组末删除
$update = [
    '$pull' => [
        'fruits' => 'apple'
    ]
];

배열의 모든 Apple 요소가 삭제되었습니다

upsert

upsert는 특별한 업데이트입니다. 하지만 조건에 맞는 세트가 발견되면 이전 수정과 동일하게 됩니다. 조건에 맞는 컬렉션이 없으면 쿼리 조건과 수정된 문서를 사용하여 새 문서로 컬렉션에 삽입됩니다.

아래에서는 우리가 자주 접하는 상황을 예로 들어보겠습니다. 각 IP의 조회수를 기록하는 것입니다. 새 IP인 경우 컬렉션에 추가됩니다. 이미 존재하는 경우 원래 컬렉션이 수정됩니다.

$collect->updateOne(['ip' => '116.31.23.1'], [
    '$inc' =>[
        'views' => 1
    ]
], ['upsert' => true]);

$collect->updateOne(['ip' => '127.0.0.1'], [
    '$inc' =>[
        'views' => 1
    ]
], ['upsert' => true]);


$collect->updateOne(['ip' => '116.31.23.1'], [
    '$inc' =>[
        'views' => 1
    ]
], ['upsert' => true]);
> db.users.find()
{ "_id" : ObjectId("5f4336f3a95f1a505db9a2df"), "ip" : "116.31.23.1", "views" : 2 }
{ "_id" : ObjectId("5f4336f3a95f1a505db9a2e1"), "ip" : "127.0.0.1", "views" : 1 }

여러 문서 업데이트

여러 문서를 업데이트하려면 updateMany() 메서드가 필요하며 데모는 다음과 같습니다.

$collect->insertMany([
    ['name' => 'gwx', 'age' => 30],
    ['name' => 'gwx', 'age' => 30],
    ['name' => 'gwx', 'age' => 30],
]);

$collect->updateMany([
    'name' => 'gwx'
],
    ['$set' =>['age' => 18]]
);

위 내용은 MongoDB 문서 업데이트(php 코드 예시)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.