Skip to content

Instantly share code, notes, and snippets.

@nikes
Forked from brandongoode/comment-example.js
Created October 29, 2021 08:09
Show Gist options
  • Save nikes/c12b1f8422bfc579044f5cff68437a00 to your computer and use it in GitHub Desktop.
Save nikes/c12b1f8422bfc579044f5cff68437a00 to your computer and use it in GitHub Desktop.
Dynamoose range and hash key example
var commentSchema = new Schema({
postId: {
type: String,
hashKey: true
},
id: {
type: String,
rangeKey: true,
default: shortId.generate
},
timestamp: Date
commenterId: {
type: String,
required: true,
index: {
global: true,
rangeKey: 'timestamp',
}
},
text: String,
likes: Number
});
var Comment = dynamoose.model('Comment', commentSchema);
// Get a single comment using the table key
Comment.get(
{postId: postId, id: commentId}, // this is the table key (hash and range)
function (err, comment) {...}
);
// Get all comments for a post
Comment
.query('postId').eq(postId) // only table hash key is used
.exec(function (err, allCommentsForPost) {...});
// Get all comments for a commenter
Comment
.query('commenterId').eq(commenterId) // hash key for index
.exec(function (err, allCommentsForCommenter) {...});
// Get all comments for a commenter within last 10 days (uses range key)
Comment
.query('commenterId').eq(commenterId)
.where('timestamp').ge(Date.now() - 8.64e+8) // use .where for range keys
.exec(function (err, commentsForCommenterWithin10Days) {...});
// Get all comments for a commenter with likes (uses filters - slower than range)
Comment
.query('commenterId').eq(commenterId)
.filter('likes').gt(0) // use filter when not a range key
.exec(function (err, commentsForCommenterWithLikes) {...});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment