I'm pushing subdocuments to an array:
const deliverySchema = new db.Schema({
deliveryId: Number,
amountDelivered: Number,
price: Number
})
const suppliersSchema = new db.Schema({
supplierName: String,
phone: Number,
deliveries: [deliverySchema]
})
const delivery = {
"amountDelivered": 123,
"price": 123
}
Suppliers.updateOne(
{ _id: supplierId },
{ $push: { deliveries: delivery } }
)
How can I have the deliveryId
field inside that document auto increment on update. So the result would look something like:
{
"supplierName": "Test supplier",
"phone": 12345678,
"deliveries": [
{
"deliveryId": 1, // Auto increment this field on update
"amountDelivered": 123,
"price": 123
},
{
"deliverId": 2,
"amountDelivered": 123,
"price": 1234
}
]
}
You can do it with Aggregation Framework:
$concatArrays
- to concatenate the current deliveries array with new item $size
- to get the current size of the deliveries array $sum
- to sum current size of the deliveries array with 1 and use the result to set deliveryId db.collection.update({
"key": 1
},
[
{
"$set": {
"deliveries": {
"$concatArrays": [
"$deliveries",
[
{
"deliveryId": {
"$sum": [
1,
{
"$size": "$deliveries"
}
]
},
"amountDelivered": 123,
"price": 123
}
]
]
}
}
}
])
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.