-
-
Save brwnll/7915142 to your computer and use it in GitHub Desktop.
// Data sample | |
[ | |
{ | |
"end": "23:00:00" , | |
"day": "5" , | |
"id": "003b2c9b-fdae-4112-b29b-6081ae138060" , | |
"start": "16:00:00" | |
}, | |
{ | |
"end": "17:00:00" , | |
"day": "6" , | |
"id": "00466316-585f-4578-95ab-99431ed2bece" , | |
"start": "12:00:00" | |
}, | |
{ | |
"end": "18:00:00" , | |
"day": "0" , | |
"id": "067fc39b-2fe8-42d1-a223-533a73998c6b" , | |
"start": "12:00:00" | |
} | |
] | |
// Attempted query | |
r.table("hours") | |
.filter({"id":"003b2c9b-fdae-4112-b29b-6081ae138060"}) | |
.update(function(doc) { return { day : doc("day") + 1 } }) | |
// Result | |
{ | |
"end": "23:00:00" , | |
"day": "var_21("day")1" , | |
"id": "003b2c9b-fdae-4112-b29b-6081ae138060" , | |
"start": "16:00:00" | |
} |
Note that to get one single document by primary key, you can also use get
instead of filter
-- of course, filter
allows for much more interesting expressions (and finding documents by values other than the primary key).
Also, if you're working with dates and times, you may want to read more about RethinkDB's support for dates: http://rethinkdb.com/docs/dates-and-times/
Thanks, appreciate the help. But when I attempt that query I get an error:
"first_error": "Expected type STRING but found NUMBER." ,
Using
r.table("hours")
.filter({"id":"003b2c9b-fdae-4112-b29b-6081ae138060"})
.update(function(doc) { return { day : doc("day").add(1) } })
Secondarily, I was also looking at the datetime support (pretty awesome), maybe you have some recommendations on queries or data modeling from a ReQL perspective.
What I have is a large number of businesses, with operating hours. (Above is a snippet of the hours table; day (0-6), open/start (24 hr time), close/end (24 hr time).
What I was attempting to glean from the docs: Is there a way for me to make use of ReQL date support when my days are not specific dates, but instead a reference to a day each week. My need will be to do simple, specific time lookups (eg: Which businesses are open Friday at 10pm).
You may want to convert all the day
fields to number first
r.table("hours").update( {
day: r.row("day").coerceTo("NUMBER")
})
And then run @mglukhovsky query.
If you want to keep strings for the day
field, you can use this query:
r.table("hours")
.filter({"id":"003b2c9b-fdae-4112-b29b-6081ae138060"})
.update(function(doc) {
return { day : doc("day").coerceTo("NUMBER").add(1).coerceTo("STRING") }
})
@brwnwll, JavaScript doesn't have the luxury of allowing us to overload operators, so to accomplish this in JS, just use
add
:In Python and Ruby, you can use
+
. For more info, check out the docs foradd
(switch to Python / Ruby to see their operator): http://rethinkdb.com/api/javascript/add/