Javascript 如何仅更新Mongodb中现有对象的某些键?
这就是我的情况: 在angular 8应用程序中,我创建发票。这是一个发票对象:Javascript 如何仅更新Mongodb中现有对象的某些键?,javascript,angular,mongodb,object,mongoose,Javascript,Angular,Mongodb,Object,Mongoose,这就是我的情况: 在angular 8应用程序中,我创建发票。这是一个发票对象: { "_id": { "$oid": "5ea9ad58f65d8d49841362bd" }, "details": [ { "_id": "5ea1eff27a1fcb29c4e7d1b6", "Client": "test", "km": 88, "Subject": "test", "Loca
{
"_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
}
但在应用程序的使用过程中,某些属性会更改值,如工时
,总计
,行驶里程
,工时成本
和详细信息
。更新的对象将打印到控制台。因此,每当用户打开组件时,我希望它发布整个对象,但如果存在具有该客户机名称的发票,则仅根据客户机更新每个发票的那些属性
更新的对象是此。发票
:
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
}
那我该怎么做呢?很抱歉问了一个很模糊的问题,但我已经坚持了很长一段时间了。如果您需要更多信息,请让我知道您可以通过“id”查询以搜索已更改的特定值,例如:
db.getCollection('hourCosts')。查找({u id:'5ea9ad58f65d8d49841362bd')
使用.find()按id在集合中搜索将非常有效。有一个非常有用的猫鼬文档页面
另外,需要澄清的是,如果名称是唯一的,您将发布完整的客户模式,否则将通过“客户”更新相关发票,对吗?链接的文档页面对于大多数查询类型都很有用,您可以创建额外的mongoose模式,以增加更改内容的粒度。您可以通过“id”进行查询,以搜索已更改的特定值,例如:
db.getCollection('hourCosts').find({u-id:'5ea9ad58f65d8d49841362bd})
使用.find()按id在集合中搜索将非常有效。有一个非常有用的猫鼬文档页面
另外,需要澄清的是,如果名称是唯一的,您将发布完整的客户模式,否则将通过“客户”更新相关发票,对吗?链接的文档页面对于大多数查询类型都很有用,您可以创建额外的mongoose模式,以增加更改内容的粒度。您可以在更新命令中使用mongoDB$集,例如:
db.city.update({_id:ObjectId("584a13d5b65761be678d4dd4")}, {$set: {"citiName":"Jakarta Pusat"}})
确保将_id作为ObjectId传递
您可以在update命令中使用mongoDB$set,例如:
db.city.update({_id:ObjectId("584a13d5b65761be678d4dd4")}, {$set: {"citiName":"Jakarta Pusat"}})
确保将_id作为ObjectId传递
这是否回答了您的问题?这回答了你的问题吗?