Метод findOneAndUpdate изменяет идентификатор моего элемента в массиве - PullRequest
0 голосов
/ 03 ноября 2018

Я работаю с mongoDB, mongoose и graphQL . Я пытаюсь сделать обновление в моей БД.

Я делаю обновление в массиве телефонов, изменения работают отлично, единственная проблема в том, что когда обновление заканчивается, значение objectId изменяется.

// Модели -> Организация схемы

const organizationSchema = new mongoose.Schema({  
 name: String,
 address: String,
 phones: [
  {
   number: Number,
   prefix: Number
  }
 ],
 email: String
})

// Типы -> Организация

type Response {
    success: Boolean!
    token: String   
    errors: [Error]
}

type Error {
    path: String!
    message: String!
}

input iOrganization {
    _id: ID
    arrID: ID
    address: String        
    email: String        
    number: Int
    prefix: Int
    name: String
}

type Mutation {      
    updateOrgGeneric(iOrg: iOrganization): Response!
}

// Решатели -> Организация (1-й путь)

Mutation: {
    updateOrgGeneric:  (parent, args, {models}) => {      
        return models.Organization.findOneAndUpdate(
            { "_id": args.iOrg._id, "phones._id": args.iOrg.arrID },
            {  $set: { "phones.$": { number: args.iOrg.number, prefix: args.iOrg.prefix }} },
            {new: true}                
        )
        .then((resp) => {         
            console.log(resp);

            return {
                success: true,
                errors: []
            }  
        })
        .catch((error) => {
            return {
                success: false,
                errors: error
            };    
        })
    },
}

// Resolvers -> Organization (2nd way)

Mutation: {
    updateOrgGeneric:  (parent, args, {models}) => {      
        return models.Organization.findOneAndUpdate(
            { "_id": args.iOrg._id },
            {  $set: { "phones.$[arr]": { number: args.iOrg.number, prefix: args.iOrg.prefix }} },
            {new: true}
            { arrayFilters:[{ "arr._id": mongoose.Types.ObjectId(args.iOrg.arrID) }], new: true}                
        )
        .then((resp) => {         
            console.log(resp);

            return {
                success: true,
                errors: []
            }  
        })
        .catch((error) => {
            return {
                success: false,
                errors: error
            };    
        })
    }
}

// Детская площадка (http://localhost:5000/graphql)

mutation {
 updateOrgGeneric(
   iOrg: {
    _id: "5bdbee1b794b972bc8562aeb"             
    arrID: "5bdcea7cae88be098c020b19"
    number: 85239,
    prefix: 862 
   }
 ){
   success
   errors {
    path
    message
   }
 }
}

Оба _id, как arrID, существуют в BD.

В примере с игровой площадкой начальный arrID был: _id: ObjectId ("5bdcea7cae88be098c020b19"), но после обновления другой, пример: _id: ObjectId ("5bdcec0a2ab78533b4bd1d98"). Что я делаю не так?

Спасибо!

1 Ответ

0 голосов
/ 04 ноября 2018

Mongodb - это база данных nosql, которая означает, что каждый объект в базе данных должен состоять из идентификатора и значений редакции. Как только происходит обновление, значение редакции изменяется как часть процесса обновления, чтобы реализовать изменения, внесенные в объект данных. Поскольку у вашего объекта данных нет значения ревизии, значение id изменяется. Потому что это уникально. Сейчас я не специалист по монго, но вы должны проверить документы о том, как сохранить объекты данных и изменить соответствующим образом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...