node.jsrethinkdbrethinkdb-javascript

match atleast one element of given array of data in RethinkDB


I have a data set like follows-

[{
    "name": "new name",
    "tags":[{
      "addedBy":  "userABCe3" ,
      "addedDTS": Tue Jan 23 2018 13:02:37 GMT+00:00 ,
      "tagId":  "08d679c8-31b6-48d3-b8f3-3ab89f7bb821"
      },{
     "addedBy":  "userABCe3" ,
     "addedDTS": Tue Jan 23 2018 13:02:37 GMT+00:00 ,
     "tagId":  "08d679c8-31b6-48d3-b8f3-3ab89f7bb823"
    }]
},
{
    "name": "data 1",
    "tags":[{
     "addedBy":  "userABCe3" ,
     "addedDTS": Tue Jan 23 2018 13:02:37 GMT+00:00 ,
     "tagId":  "08d679c8-31b6-48d3-b8f3-3ab89f7bb823"
     },{
     "addedBy":  "userABCe3" ,
     "addedDTS": Tue Jan 23 2018 13:02:37 GMT+00:00 ,
     "tagId":  "08d679c8-31b6-48d3-b8f3-3ab89f7bb824"
     }]
}]

i need to query, the data having any atleast one match in given tagIds array

[ "08d679c8-31b6-48d3-b8f3-3ab89f7bb824", "08d679c8-31b6-48d3-b8f3-3ab89f7bb822"]

expected result as follows :

[{
    "name": "data 1",
    "tags":[{
     "addedBy":  "userABCe3" ,
     "addedDTS": Tue Jan 23 2018 13:02:37 GMT+00:00 ,
     "tagId":  "08d679c8-31b6-48d3-b8f3-3ab89f7bb823"
     },{
     "addedBy":  "userABCe3" ,
     "addedDTS": Tue Jan 23 2018 13:02:37 GMT+00:00 ,
     "tagId":  "08d679c8-31b6-48d3-b8f3-3ab89f7bb824"
     }]
}]

thanks in advance


Solution

  • this query worked for me

    r.db('dbName').table("tableName").filter(function(doc){
        var tags = doc('tags')('tagId');
        var tagIds = ['08d679c8-31b6-48d3-b8f3-3ab89f7bb881','08d679c8-31b6-48d3-b8f3-3ab89f7bb823' ];
        var query = tagIds.map(function(tagId){
          return tags.contains(tagId)
        });
        return r.expr(query).contains(true)
      })