I have a comment collection with Comment Text in array with its Metadata. I like to the pagination in the Comment Text Array. The pagination should allow me to get the “previous 5” or “next 5”. What is the best way to do this in mongoDB with good performance.
{ "_id" : ObjectId( "502c706ac2e6777781a593f6" ),
"commentType":"loc",
"commentList" : [
{ "commentText" : "HelloComment",
"commentTS" : Date( 1345165636344 ),
"commentLoc" : { "commentlat" : 0,
"commentlong" : 0 },
"userInfo" : { "$ref" : "userProfile",
"$id" : ObjectId( "4fd182d92b2a87f780c6bbe8" ) } },
{ "commentText" : "2222222",
"commentTS" : Date( 1345165636344 ),
"commentLoc" : { "commentlat" : 0,
"commentlong" : 0 },
"userInfo" : { "$ref" : "userProfile",
"$id" : ObjectId( "4fd182d92b2a87f780c6bbe8" ) } },
{ "commentText" : "3333333",
"commentTS" : Date( 1345165636344 ),
"commentLoc" : { "commentlat" : 0,
"commentlong" : 0 },
"userInfo" : { "$ref" : "userProfile",
"$id" : ObjectId( "4fd182d92b2a87f780c6bbe8" ) } },
{ "commentText" : "44444444",
"commentTS" : Date( 1345165636344 ),
"commentLoc" : { "commentlat" : 0,
"commentlong" : 0 },
"userInfo" : { "$ref" : "userProfile",
"$id" : ObjectId( "4fd182d92b2a87f780c6bbe8" ) } },
{ "commentText" : "5555555",
"commentTS" : Date( 1345165636344 ),
"commentLoc" : { "commentlat" : 0,
"commentlong" : 0 },
"userInfo" : { "$ref" : "userProfile",
"$id" : ObjectId( "4fd182d92b2a87f780c6bbe8" ) } },
{ "commentText" : "6666666",
"commentTS" : Date( 1345165636344 ),
"commentLoc" : { "commentlat" : 0,
"commentlong" : 0 },
"userInfo" : { "$ref" : "userProfile",
"$id" : ObjectId( "4fd182d92b2a87f780c6bbe8" ) } },
{ "commentText" : "777777",
"commentTS" : Date( 1345165636344 ),
"commentLoc" : { "commentlat" : 0,
"commentlong" : 0 },
"userInfo" : { "$ref" : "userProfile",
"$id" : ObjectId( "4fd182d92b2a87f780c6bbe8" ) } },
{ "commentText" : "888888",
"commentTS" : Date( 1345165636344 ),
"commentLoc" : { "commentlat" : 0,
"commentlong" : 0 },
"userInfo" : { "$ref" : "userProfile",
"$id" : ObjectId( "4fd182d92b2a87f780c6bbe8" ) } },
{ "commentText" : "6666666",
"commentTS" : Date( 1345165636344 ),
"commentLoc" : { "commentlat" : 0,
"commentlong" : 0 },
"userInfo" : { "$ref" : "userProfile",
"$id" : ObjectId( "4fd182d92b2a87f780c6bbe8" ) } },
{ "commentText" : "999999",
"commentTS" : Date( 1345165668809 ),
"commentLoc" : { "commentlat" : 0,
"commentlong" : 0 },
"userInfo" : { "$ref" : "userProfile",
"$id" : ObjectId( "4fdeb271de26fd298262bb84" ) } },
{ "commentText" : "HelloComment",
"commentTS" : Date( 1345749858601 ),
"commentLoc" : { "commentlat" : 0,
"commentlong" : 0 },
"userInfo" : { "$ref" : "userProfile",
"$id" : ObjectId( "4fdeb271de26fd298262bb84" ) } },
{ "commentText" : "NewTestforcomments",
"commentTS" : Date( 1345750020526 ),
"commentLoc" : { "commentlat" : 0,
"commentlong" : 0 },
"userInfo" : { "$ref" : "userProfile",
"$id" : ObjectId( "4fdeb271de26fd298262bb84" ) } } ],
} }
Thanks for your help.
You can do this with
$slice:http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields#RetrievingaSubsetofFields-RetrievingaSubrangeofArrayElements
There’s also a JS test example of slice here.
So,
findOne, combined with$slice, is probably the way to go.Without more info about the language you’re using, I think that’s the deepest I can go.