Details
Description
Problem Description
When using the select statement with an object and String values the result is replaced with the values from the select statement. I tried it out in 4.0 and 4.2 and this is not an issue. This is only an issue in version 4.4.
Steps to Reproduce
(function(){ |
const products = [ 'apples', 'peaches', 'bananas', 'oranges', 'grapes', 'watermelons', ]; |
for (let product of products) { let item = { id: new Date().getTime(), name: product, qty: Math.round( Math.random() * (50 - 1) + 1 ) } db.products.save(item); } |
|
let results = db.products.find({}, {name:1, qty:'You have none!!', attack:'<scripts>alert("boo!")</scripts>'}); |
printjson(results.toArray());
|
db.products.drop();
|
})();
|
Expected Results
The expected results would be the actual values from the database not fake results from the select statement.
[
|
{
|
"_id": ObjectId("6078ad7cc3006933c653ede5"),
|
"name": "apples",
|
"qty": 44
|
},
|
{
|
"_id": ObjectId("6078ad7cc3006933c653ede6"),
|
"name": "peaches",
|
"qty": 47
|
},
|
{
|
"_id": ObjectId("6078ad7cc3006933c653ede7"),
|
"name": "bananas",
|
"qty": 14
|
},
|
{
|
"_id": ObjectId("6078ad7cc3006933c653ede8"),
|
"name": "oranges",
|
"qty": 14
|
},
|
{
|
"_id": ObjectId("6078ad7cc3006933c653ede9"),
|
"name": "grapes",
|
"qty": 16
|
},
|
{
|
"_id": ObjectId("6078ad7cc3006933c653edea"),
|
"name": "watermelons",
|
"qty": 45
|
}
|
]
|
|
|
Actual Results
I would expect quantity to be a number and attack to be nonexistent
[
|
{
|
"_id": ObjectId("6078ab09c3006933c653edcd"),
|
"name": "apples",
|
"qty": "yep",
|
"attack": "<scripts>alert(\"boo!\")</scripts>"
|
},
|
{
|
"_id": ObjectId("6078ab09c3006933c653edce"),
|
"name": "peaches",
|
"qty": "yep",
|
"attack": "<scripts>alert(\"boo!\")</scripts>"
|
},
|
...
|
]
|
Additional Notes
I set up a Gist here using the Mongoose driver.
https://gist.github.com/jwerre/ef447dc1d60a48865c8574dff73d7a69