Как обновить массив объектов без использования цикла или базы данных сканирования - PullRequest
0 голосов
/ 18 сентября 2018

Здесь я хочу обновить 1 поле для всех элементов в массиве объектов . Как обновить это поле только одним запросом, не зацикливая и не обновляя каждый из элементов или не сканируя всю базу данных и не сопоставляя ее?

Схема моей модели:

let NameCardSchema = mongoose.Schema({
    fullname: {
        type: String,
        required: true
    },
    occupation: {
        type: String,
        default: null
    },
    company: {
        type: String,
        default: null,
    },
    position: {
        type: String,
        default: null,
    },
    userID: [String] // field to update
});

Пример данных:

User:
    _id:5b8e4c6a879ac54ee0f30bb3
    username:"Duc"

Namecard array:
[
    namecard1:
        _id:5b9615c6b157af5afc8ce426
        occupation:null
        company:"KIS"
        position:"Developer"
        fullname:"Duc Nguyen Trung"
        userID:"5b9a173f0749c52b583818ec"

    namecard2:
        _id:5b96162fb157af5afc8ce428
        occupation:null
        company:"KIS"
        position:"Developer"
        fullname:"Hieu Vuong"
        userID:"5b9a16700749c52b583818ea"
]

Ожидаемый результат:

[
    namecard1:
        _id:5b9615c6b157af5afc8ce426
        occupation:null
        company:"KIS"
        position:"Developer"
        fullname:"Duc Nguyen Trung"
        userID:"5b9a173f0749c52b583818ec", "5b8e4c6a879ac54ee0f30bb3" // username Duc's ID added

    namecard2:
        _id:5b96162fb157af5afc8ce428
        occupation:null
        company:"KIS"
        position:"Developer"
        fullname:"Hieu Vuong"
        userID:"5b9a16700749c52b583818ea", "5b8e4c6a879ac54ee0f30bb3" // username Duc's ID added
]

1 Ответ

0 голосов
/ 18 сентября 2018

Чтобы добавить новую запись в массив userID всех документов, просто выполните это:

db.collection.updateMany({ /* no filter */ }, { $push: { "Namecards.$[].userID": "5b8e4c6a879ac54ee0f30bb3" } })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...