Reputation:
Lets say we have a document in MongoDB contains an array ob objects like this:
addresses: [
{
city: "Tel Aviv",
street: "Alenby",
streetNumber: 50
},
{
city: "Jerusalem",
street: "King David",
streetNumber: 10
},
{
city: "Beer Sheva",
street: "King Shlomo",
streetNumber: 20
}
]
THE QUESTION SLICED FOR SINGLE UNDER PIECES
We want to update the second address of this client, from King David 10 to King Shaul 35. How can we do that?
We want to remove only the second address by index or key or matched key+value.
We want to push another address between first to second, so first will remain first, a new address will be injected, and all of the next will be auto indexed by next.
Note: I am asking how do I do that using MongoDB query language, aka NoSQL. If you also have a solution for doing it using AngularJS it will be welcome, but please place it after the first solution for Mongo query language (MQL).
Thanks!
Upvotes: 1
Views: 92
Reputation: 866
Creating collection in order to demonstrate
> db.so.find().pretty()
{
"_id" : ObjectId("5a0413ad008e3cd140e59af7"),
"addresses" : [
{
"city" : "Tel Aviv",
"street" : "Alenby",
"streetNumber" : 50
},
{
"city" : "Jerusalem",
"street" : "King David",
"streetNumber" : 10
},
{
"city" : "Beer Sheva",
"street" : "King Shlomo",
"streetNumber" : 20
}
]
}
Update a single field of a document stored in an array in MongoDB.
> db.so.update({ "addresses.street": "King David" }, { $set: { "addresses.$.street" : "King Shaul" }});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.so.find().pretty()
{
"_id" : ObjectId("5a0413ad008e3cd140e59af7"),
"addresses" : [
{
"city" : "Tel Aviv",
"street" : "Alenby",
"streetNumber" : 50
},
{
"city" : "Jerusalem",
"street" : "King Shaul",
"streetNumber" : 10
},
{
"city" : "Beer Sheva",
"street" : "King Shlomo",
"streetNumber" : 20
}
]
}
Remove a document from an array in MongoDB.
> db.so.update({}, { $pull: { "addresses" : { "street": "King Shaul"} }});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.so.find().pretty()
{
"_id" : ObjectId("5a0413ad008e3cd140e59af7"),
"addresses" : [
{
"city" : "Tel Aviv",
"street" : "Alenby",
"streetNumber" : 50
},
{
"city" : "Beer Sheva",
"street" : "King Shlomo",
"streetNumber" : 20
}
]
}
Add a document to a specific index in an array in MongoDB.
> db.so.update({"_id" : ObjectId("5a0413ad008e3cd140e59af7")}, {$push: {"addresses": {$each: [{"city": "New York", "street": "Jones"}], $position: 1}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.so.find().pretty()
{
"_id" : ObjectId("5a0413ad008e3cd140e59af7"),
"addresses" : [
{
"city" : "Tel Aviv",
"street" : "Alenby",
"streetNumber" : 50
},
{
"city" : "New York",
"street" : "Jones"
},
{
"city" : "Beer Sheva",
"street" : "King Shlomo",
"streetNumber" : 20
}
]
}
Upvotes: 1