CRUD and Arrays
There are a bunch of array operators. Here's some snippets of the array operators in action.
track the array throughoug the following examples.
- CRUD and Arrays
Delete a value from an array with $pull
// CREATE an array at key "arrKey"
db.test.insertOne({ _id: 2, arrKey: [123, 234, 345, 456] })
// DELETE a key from that array
db.test.updateOne({ _id: 2 }, { $pull: { arrKey: { $eq: 234 } } })
Add a value if not already present with $addToSet
// ADD a val to the arr if not already present with $addToSet
db.test.updateOne({ _id: 2 }, { $addToSet: { arrKey: "just-added" } })
db.test.findOne({ _id: 2 })
// { _id: 2, arrKey: [ 123, 345, 456, 'just-added' ] }
Remove an item from the beginning or end with $pop
db.test.updateOne({_id:2}, { $pop: { arrKey: -1 } })
db.test.findOne({_id:2})
// { _id: 2, arrKey: [ 345, 456, 'just-added' ] }
db.test.updateOne({_id:2}, { $pop: { arrKey: 1 } })
db.test.findOne({_id:2})
{ _id: 2, arrKey: [ 345, 456 ] }
Change the value of an array item with $set and $
// change 345 to 999
db.test.updateOne({ _id: 2, arrKey: 345 }, { $set: { "arrKey.$": 999 } })
db.test.findOne({ _id: 2 })
Getting Nested
Create array element with $ and push
The $ operator ca be used to add an element to a nested array. Here, the $
is used in combination with $push
:
// starting object in the "test" collection
;[
{
_id: "joe",
wordArr: [
{
item: "A",
words: ["quick", "brown", "fox", "trot"],
},
{ item: "B", words: ["slow", "orange", "goat"] },
],
},
]
//
joeItemA = { _id: "joe", "wordArr.item": "A" }
addPrince = { $push: { "wordArr.$.words": "prince" } }
Nlp > db.Themes.updateOne(joeItemA, addPrince)
Edit an Element in an array with $
findWater = { _id: "sally", "arrKey._id": "water" }
Delete A Douubly-nested Element with $[]
Mongo has a few special characters.
$[]
is one of them. It means to update all elements in the array
.
In this example, the $[]
is used in combination with $pull
and $eq
to remove an element that equals 2:
// obj.arrKey[arrOfObjects]
insertObj = {
_id: "sally",
arrKey: [
{
_id: "water",
arr: [1, 2, 3],
},
{
_id: "melon",
arr: [4, 5, 6],
},
],
}
db.test.insertOne(insertObj)
// remove the element "2" from the "water" object arr
findObj = { _id: "sally", "arrKey._id": "water" }
updateObj = { $pull: { "arrKey.$[].arr": { $eq: 2 } } }
db.test.updateOne(findObj, updateObj)
Delete an element from an array with $pull
db.Users.update({ _id: "sally" }, { $pull: { arrKey: { _id: "melon" } } })