I have a mongo
object and wish to access it via mongoose
for my web app. The schema I've defined has an Object
storing user ids and a 3-level value (yes, maybe or no).
e.g.
"user_info": {
"<id_value_1>": "y",
"<id_value_2>": "n"
}
The id_value_*
s above are the users session ids so a long string of random characters. How can I create a mongoose
Schema
for this?
Would user_info: {String, String}
work?
I could restructure it so that the user_info
is an array of objects { "sessionid": "<value>", "value: "y"}
, which would be ok, is this the best option?
You'll be better off if you avoid dynamic keys in your schema and go with your second idea of:
user_info: [{sessionid: String, value: String}]
You can use the $
positional operator to update individual user_info
array elements by sessionid
.
You may try with Schema Type Mixed like this way
var user = new Schema({
info: [Schema.Types.Mixed]
});
user.info = { any: { thing: 'i want' } };
user.markModified('info');
You can read more about it here
After testing the above, I found that defining the schema as user_info: { String: String }
is a valid way to do this (option 1 specified in the question).
You may define objects and arrays in your schema. You may even combine them. For example, this is an array of objects:
var user = new Schema({
foo: [ {
address: {type: String},
email: {type: String, unique: true}
}],
bar: [ "simple", "array" ]
});