Reputation: 6623
I'm developing this piece of software in Node and MongoDB in which I essentially want to store versions of packages with the following structure:
{
"versions":
{
"1.2.3": { stuff }
}
}
(similar to how npm does things in couch)
The issue is that when I updated MongoDB I discovered that it doesn't allow dots in key names (due to dot notation existing), causing my code to fail. After researching this, all I could find is that you need to transform the dots to some other character before storing in the db, then transform them back again when accessing. Is there really no better way to deal with this?
If there isn't, how can I do this transformation without copying the data over to another key and deleting the original?
Upvotes: 11
Views: 6093
Reputation: 2409
Can you use a collection of versions with stuff?
Like:
{
"versions":
[
{
"version_num": "1.2.3",
"stuff": { stuff }
},
{
"version_num": "1.2.4",
"stuff": { stuff }
}
]
}
Upvotes: 4
Reputation: 5100
Dot restrictions are currently driver enforced, and not all drivers have prevented dots in field names since the beginning. You can write raw protocol code to do all sorts of crazy stuff in Mongo, including using really weird characters in collection names.
You will be much better off if you clean that up (probably replace dots with - or some other valid character), but it's going to be difficult to do it well with any kind of intelligent filtering. You will most likely need to iterate through the entire collection, munge the values in your app, and then overwrite the entire "versions" field in your doc. In place overwrites this should be reasonably speedy since they won't resize the doc, and likely won't change any indexes.
Upvotes: 2