Как мне обновить только определенные ключи существующих объектов в Mongodb? - PullRequest
1 голос
/ 30 апреля 2020

Итак, это мой случай:

В моем приложении angular 8 я создаю счета. это объект счета:

{
"_id": {
    "$oid": "5ea9ad58f65d8d49841362bd"
},
"details": [
    {
        "_id": "5ea1eff27a1fcb29c4e7d1b6",
        "Client": "test",
        "km": 88,          
        "Subject": "test",
        "Location": "test",
        "StartTime": "2020-04-27T09:00:00.000Z",
        "EndTime": "2020-04-27T17:00:00.000Z",
        "IsAllDay": false,
        "StartTimezone": null,
        "EndTimezone": null,
        "Description": "oekfokef",
        "RecurrenceRule": "FREQ=DAILY;INTERVAL=1;COUNT=5;",
        "Id": 2,
        "CreatedBy": "bob"
    },
    {
        "_id": "5ea1f36297a9a315bc8ed078",
        "Client": "test",
        "km": 88,      
        "Subject": "ewfwefwe",
        "Location": "fwefwefwefewfwefwef",
        "StartTime": "2020-04-20T09:00:00.000Z",
        "EndTime": "2020-04-20T17:00:00.000Z",
        "IsAllDay": false,
        "StartTimezone": null,
        "EndTimezone": null,
        "Description": "wefwefewfwef",
        "RecurrenceRule": "FREQ=DAILY;INTERVAL=1;COUNT=5;",
        "Id": 3,
        "CreatedBy": "bob"
    },
    {
        "_id": "5ea1f38d97a9a315bc8ed083",
        "Client": "test2",
        "km": 38,
        "Subject": "test",
        "Location": "test",
        "StartTime": "2020-05-04T09:00:00.000Z",
        "EndTime": "2020-05-04T16:00:00.000Z",
        "IsAllDay": false,
        "StartTimezone": null,
        "EndTimezone": null,
        "Description": "test",
        "RecurrenceRule": "FREQ=DAILY;INTERVAL=1;COUNT=5;",
        "Id": 4,
        "CreatedBy": "bob"
    }
],
"client": "Robin",
"hoursWorked": 75,
"kmsTravelled": 880,
"invoiceDate": "2020-04-29T16:37:44.948Z",
"paid": "false",
"subTotal": 3917.2,
"travelexpenses": 167.2,
"tax": 879.7,
"hoursCosts": 3750,
"total": 4796.9,
"createdBy": "bob",
"__v": 0
}

Но во время использования приложения некоторые свойства меняют значение, например hoursWorked, total, kmTravelled, hourCosts и details. Обновленные объекты выводятся на консоль. Таким образом, всякий раз, когда пользователь открывает компонент, я хочу, чтобы он опубликовал весь объект, но если счет с таким именем клиента уже существует, обновляйте только те свойства каждого счета для client.

обновленный объект this.invoice:

this.invoice = {
      client: element.Client,
      hourCosts: (element.difference)*this.Client.price,

      hoursWorked: (element.difference),
      kmsTravelled: element.km,


      travelexpenses: this.Client.kmPrice* element.km,


      subTotal: (this.Client.kmPrice* element.km) + ((element.difference)*this.Client.price),
      total: ((this.Client.kmPrice* element.km) + ((element.difference)*this.Client.price)) + ((this.Client.kmPrice* element.km)+((element.difference)*this.Client.price) * this.tax/100),
      createdBy: this.userName,

      details: this.details
     }

Так, как мне go об этом? Извините за довольно расплывчатый вопрос, но я застрял с этим довольно долго. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

вы можете использовать mongoDB $ set в команде обновления, например:

db.city.update({_id:ObjectId("584a13d5b65761be678d4dd4")}, {$set: {"citiName":"Jakarta Pusat"}})

убедитесь, что вы передаете _id как ObjectId

https://www.djamware.com/post/58578ab880aca715e80d3caf/mongodb-simple-update-document-example

0 голосов
/ 30 апреля 2020

Вы можете выполнить запрос по 'id' для поиска определенных c значений, которые изменились с чем-то вроде: db.getCollection('hourCosts').find({_id:'5ea9ad58f65d8d49841362bd'})

Поиск в коллекции по идентификатору с помощью .find () будет эффективным. Есть действительно полезный пн goose do c page здесь .

Кроме того, просто уточните, вы публикуете полную схему клиента, если имя уникально, в противном случае обновляете соответствующую счета от «клиента», это правильно? Связанная страница do c должна быть полезна для большинства типов запросов, и вы можете создать дополнительные схемы mon goose для некоторой дополнительной детализации содержимого, которое вы изменяете.

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