Sample document
[{
"_id": "1111",
"name": "Dani"
},
{
"_id": "2222",
"name": "Guya",
"address": "Arlozorov",
"city": "Tel Aviv"
}]
Expected output, i want to add the length field
[{
"_id": "1111",
"name": "Dani",
"length": 2
},
{
"_id": "2222",
"name": "Guya",
"address": "Arlozorov",
"city": "Tel Aviv",
"length": 4
}]
CodePudding user response:
Query
$$ROOTis the document (system variable)- convert it to an array
- take the array length and
$set
aggregate(
[{"$set": {"length": {"$size": {"$objectToArray": "$$ROOT"}}}}])
CodePudding user response:
There's a fair amount of ambiguity in your description of "length". For example, if there is an array, does that count as one, or should the array contents be counted too? Same for embedded/nested fields documents, etc. And should the ever present "_id" field be counted?
Anyway, given your example documents and desired output, here's one way you could update each document with your "length" field.
db.collection.update({},
[
{
"$set": {
"length": {
"$subtract": [
{
"$size": {
"$objectToArray": "$$ROOT"
}
},
1
]
}
}
}
],
{
"multi": true
})
Try it on mongoplayground.net.
