programing

호출 한 번으로 객체 배열을 몽구스의 배열로 푸시하는 방법은 무엇입니까?

testmans 2023. 5. 20. 10:31
반응형

호출 한 번으로 객체 배열을 몽구스의 배열로 푸시하는 방법은 무엇입니까?

호출 하나를 사용하여 mongoose의 배열에 여러 값을 푸시해야 합니다.더 작은 배열을 사용하여 시도했지만 배열이 하위 배열로 삽입되고 있습니다.

var kittySchema = new mongoose.Schema({
        name: String,
        values: [Number]
});

var Kitten = db.model('Kitten', kittySchema);
Kitten.update({name: 'fluffy'},{$push: {values:[2,3]}},{upsert:true},function(err){
        if(err){
                console.log(err);
        }else{
                console.log("Successfully added");
        }
});

위의 코드를 세 번 호출한 결과는 다음과 같습니다.

{ "_id" : ObjectId("502b0e807809d79e84403606"), "name" : "fluffy", "values" : [ [ 2, 3 ], [ 2, 3 ], [ 2, 3 ] ] }

반면에 제가 원하는 것은 다음과 같습니다.

{ "_id" : ObjectId("502b0e807809d79e84403606"), "name" : "fluffy", "values" : [ 2, 3 ,2 ,3, 2, 3] }

배열(값)의 유형이 숫자로 지정되어 있다는 것을 알게 된 또 다른 점은 '엄격한' 옵션을 사용하면 숫자 이외의 항목이 삽입되지 않는다는 것입니다.이 경우 다른 배열을 삽입할 수 있습니다.

(2014년 12월 업데이트) MongoDB2.4 이후에는 다음을 사용해야 합니다.

Kitten.update({name: 'fluffy'}, {$push: {values: {$each: [2,3]}}}, {upsert:true}, function(err){
        if(err){
                console.log(err);
        }else{
                console.log("Successfully added");
        }
});

사용되지 않음 아래 $push $를 사용하는 다른 솔루션 참조

예제는 비슷하지만 다른 어레이를 다른 어레이로 밀어넣는 대신 각각의 값을 개별적으로 추가하는 $pushAll을 원합니다.values배열):

var Kitten = db.model('Kitten', kittySchema);
Kitten.update({name: 'fluffy'},{$pushAll: {values:[2,3]}},{upsert:true},function(err){
        if(err){
                console.log(err);
        }else{
                console.log("Successfully added");
        }
});

또는 $addToSet과 함께 $each 수식어를 사용합니다.

https://docs.mongodb.com/manual/reference/operator/update/addToSet/ #각 수식자

// Existing tags array
{ _id: 2, item: "cable", tags: [ "electronics", "supplies" ] }

// Add "camera" and "accessories" to it
db.inventory.update(
   { _id: 2 },
   { $addToSet: { tags: { $each: [ "camera", "accessories" ] } } }
 )

현재 업데이트된 문서가 지원하지 않습니다.$pushAll그것은 더 이상 사용되지 않는 것 같습니다.이제 좋은 선택은 다음의 조합을 사용하는 것입니다.$push&$each

예:

//User schema: {uid: String, transaction: [objects] }
const filter = {"uid": uid};
const update = {
        $push: {
            transactions: {$each: dataarr}
        }
    }
User.updateOne(filter, update, {upsert:true}, (err) => {
        if(err){
            console.log(err)
        }
    })

통과하다{upsert: true}필터가 false를 반환하는 경우 삽입할 옵션에 있습니다.

언급URL : https://stackoverflow.com/questions/11963684/how-to-push-an-array-of-objects-into-an-array-in-mongoose-with-one-call

반응형