Comments (5)
Hi @dambrisco
It's not something we've come up against but I can definitely see the use case!
I like the tag idea (more than previous suggestions of simply changing an ObjectID to be a string) but how would you handle edge cases like a struct with multiple "this is an ObjectID" tags applied? Typically compile-time errors are preferred but mgo does provide runtime errors for other cases so it might not be a deal breaker.
Do you have an idea what the tag would look like?
Dom
from mgo.
@domodwyer I believe multiple ObjectID tags would be admissible. As I imagine it, it functions only as a marshaling hint. Simply calling the tag "objectid"
would be my first choice - it seems clear and concise enough to prevent confusion. So in the case of a declaration like Field string `bson:"keyname,objectid"`
or Field string "keyname,omitempty,objectid"
, we simply have another step in the encoding and decoding processes.
The largest issue that I'm not sure how we might handle is non-string types. Some types, like bool
, should likely either be ignored or throw an error and I'm not sure which is preferable. Other types, like int
, pose a bigger challenge in that, if my understanding is correct, they can be represented as ObjectIDs just fine, although that might be incredibly unintuitive in some cases. Additionally, struct
types could potentially represent ObjectIDs if we were to include an ObjectID interface that they could meet, but that is likely outside the scope of any initial work here - ignoring or throwing on struct
types for now is probably more sensible. I'd especially love any thoughts or insights on these issues.
from mgo.
I like the objectid
tag! It's clean and clear.
I hadn't thought about the int case though - you raise a good point. If the user tags it as an objectid
I think it would be best to respect it and marshal it as a ObjectID
? If an incompatible type (bool
, etc as you say) is tagged with objectid
I would prefer the marshal call to return an error over silently ignoring - always better to have the developer fix in a way that suits them.
It's a good idea! Including it is contingent on having a negligible performance cost but I can't see why that wouldn't be the case.
from mgo.
Sorry, but what do you think about the String()
method. Must it really return ids as ObjectIdHex("xyz")
?
from mgo.
@dalu Can you elaborate?
I didn't understand your point, sorry.
And .Hex() == .String()
? yes, I want that.
I don't need .String method to wrap id inside ObjectIdHex
.
from mgo.
Related Issues (20)
- Query blocks with ChangeStream HOT 2
- Upsert doesn't work well with query where value is []byte format
- Expose dialInfo through a getter?
- High concurrency session copy does not release the connection and poolLimit is invalid
- Request: BSON stabilize ordering of map keys (instead of GoLang's random ordering) HOT 1
- Unwanted allocs in mgo
- Auto type assertion not working when fetching data
- Clean actions attribute of Bulk struct
- time.Parse HOT 2
- can any one tell me how to use $near to calculate lat,lng distance
- MongoDB index not being used when querying through mgo on mongoDB views
- }
- DropDatabase returns not master when seesion mode is Secondary
- mgo: FindAndModify create too many sockets
- error="SASL support not enabled during build (-tags sasl)" HOT 8
- Daemontools
- Panic With ObjectIdHex(s string)
- current
- BSON unmarshal unable to parse $date
- error="no reachable servers" HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mgo.