AsterixDB Javascript SDK

Obtaining and Including

Download the javascript SDK.

The AsterixDB javascript SDK can be included (like any other javascript library) by adding the following line in the appropriate HTML file:

<script src="path/to/asterix-sdk-stable.js"></script>

Interactive Demos

  • Cherry demo
  • All of the examples in following section can be viewed by running the interactive demo.

The javascript SDK: by example

In this section, we explore how to form AQL queries using the javascript SDK. The queries from AsterixDB 101: An ADM and AQL Primer are used as examples here. For each AQL statement, the equivalent javascript expression is shown below it, followed by the results of executing the query.

Query 0-A - Exact-Match Lookup

AQL
use dataverse TinySocial;

for $user in dataset FacebookUsers
where $user.id = 8
return $user;
JS
var expression0a = new FLWOGRExpression()
	.ForClause("$user", new AExpression("dataset FacebookUsers"))
    .WhereClause(new AExpression("$user.id = 8"))
    .ReturnClause("$user");
Results
{ "id": { int32: 8 } , "alias": "Nila", "name": "NilaMilliron", "user-since": { datetime: 1199182200000}, "friend-ids": { unorderedlist: [{ int32: 3 } ]}, "employment": { orderedlist: [{ "organization-name": "Plexlane", "start-date": { date: 1267315200000}, "end-date": null } ]} }

Query 0-B - Range Scan

AQL
use dataverse TinySocial;

for $user in dataset FacebookUsers
where $user.id >= 2 and $user.id <= 4
return $user;
JS
var expression0b = new FLWOGRExpression()
	.ForClause("$user", new AExpression("dataset FacebookUsers"))
	.WhereClause().and(new AExpression("$user.id >= 2"), new AExpression("$user.id <= 4"))
	.ReturnClause("$user");
Results
{ "id": { int32: 2 } , "alias": "Isbel", "name": "IsbelDull", "user-since": { datetime: 1295691000000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 4 } ]}, "employment": { orderedlist: [{ "organization-name": "Hexviafind", "start-date": { date: 1272326400000}, "end-date": null } ]} }
{ "id": { int32: 3 } , "alias": "Emory", "name": "EmoryUnk", "user-since": { datetime: 1341915000000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 5 } , { int32: 8 } , { int32: 9 } ]}, "employment": { orderedlist: [{ "organization-name": "geomedia", "start-date": { date: 1276732800000}, "end-date": { date: 1264464000000} } ]} }
{ "id": { int32: 4 } , "alias": "Nicholas", "name": "NicholasStroh", "user-since": { datetime: 1293444600000}, "friend-ids": { unorderedlist: [{ int32: 2 } ]}, "employment": { orderedlist: [{ "organization-name": "Zamcorporation", "start-date": { date: 1275955200000}, "end-date": null } ]} }

Query 1 - Other Query Filters

AQL
use dataverse TinySocial;

for $user in dataset FacebookUsers
where $user.user-since >= datetime('2010-07-22T00:00:00')
and $user.user-since <= datetime('2012-07-29T23:59:59')
return $user;
JS
var expression1 = new FLWOGRExpression()
	.ForClause("$user", new AExpression("dataset FacebookUsers"))
    .WhereClause().and(
		new AExpression("$user.user-since >= datetime('2010-07-22T00:00:00')"),
		new AExpression("$user.user-since <= datetime('2012-07-29T23:59:59')")
    ).ReturnClause("$user");
Results
{ "id": { int32: 2 } , "alias": "Isbel", "name": "IsbelDull", "user-since": { datetime: 1295691000000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 4 } ]}, "employment": { orderedlist: [{ "organization-name": "Hexviafind", "start-date": { date: 1272326400000}, "end-date": null } ]} }
{ "id": { int32: 10 } , "alias": "Bram", "name": "BramHatch", "user-since": { datetime: 1287223800000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 5 } , { int32: 9 } ]}, "employment": { orderedlist: [{ "organization-name": "physcane", "start-date": { date: 1181001600000}, "end-date": { date: 1320451200000} } ]} }
{ "id": { int32: 3 } , "alias": "Emory", "name": "EmoryUnk", "user-since": { datetime: 1341915000000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 5 } , { int32: 8 } , { int32: 9 } ]}, "employment": { orderedlist: [{ "organization-name": "geomedia", "start-date": { date: 1276732800000}, "end-date": { date: 1264464000000} } ]} }
{ "id": { int32: 4 } , "alias": "Nicholas", "name": "NicholasStroh", "user-since": { datetime: 1293444600000}, "friend-ids": { unorderedlist: [{ int32: 2 } ]}, "employment": { orderedlist: [{ "organization-name": "Zamcorporation", "start-date": { date: 1275955200000}, "end-date": null } ]} }

Query 2-A - Equijoin

AQL
use dataverse TinySocial;

for $user in dataset FacebookUsers
for $message in dataset FacebookMessages
where $message.author-id = $user.id
return {
    "uname": $user.name,
    "message": $message.message
};
JS
var expression2a = new FLWOGRExpression()
	.ForClause ("$user", new AExpression("dataset FacebookUsers"))
	.ForClause ("$message", new AExpression("dataset FacebookMessages"))
	.WhereClause(new AExpression("$message.author-id = $user.id"))
	.ReturnClause({
		"uname" : "$user.name",
		"message" : "$message.message"
	});
Results
{ "uname": "MargaritaStoddard", "message": " dislike iphone its touch-screen is horrible" }
{ "uname": "MargaritaStoddard", "message": " like verizon the 3G is awesome:)" }
{ "uname": "MargaritaStoddard", "message": " can't stand motorola the touch-screen is terrible" }
{ "uname": "MargaritaStoddard", "message": " can't stand at&t the network is horrible:(" }
{ "uname": "MargaritaStoddard", "message": " can't stand at&t its plan is terrible" }
{ "uname": "IsbelDull", "message": " like samsung the plan is amazing" }
{ "uname": "IsbelDull", "message": " like t-mobile its platform is mind-blowing" }
{ "uname": "WoodrowNehling", "message": " love at&t its 3G is good:)" }
{ "uname": "BramHatch", "message": " dislike iphone the voice-command is bad:(" }
{ "uname": "BramHatch", "message": " can't stand t-mobile its voicemail-service is OMG:(" }
{ "uname": "EmoryUnk", "message": " love sprint its shortcut-menu is awesome:)" }
{ "uname": "EmoryUnk", "message": " love verizon its wireless is good" }
{ "uname": "WillisWynne", "message": " love sprint the customization is mind-blowing" }
{ "uname": "SuzannaTillson", "message": " like iphone the voicemail-service is awesome" }
{ "uname": "VonKemble", "message": " dislike sprint the speed is horrible" }

Query 2-B - Index join

AQL
use dataverse TinySocial;

for $user in dataset FacebookUsers
for $message in dataset FacebookMessages
where $message.author-id /*+ indexnl */  = $user.id
return {
    "uname": $user.name,
    "message": $message.message
};
JS
var expression2b = new FLWOGRExpression()
	.ForClause ("$user", new AExpression("dataset FacebookUsers"))
	.ForClause ("$message", new AExpression("dataset FacebookMessages"))
	.WhereClause(new AExpression("$message.author-id /*+ indexnl */  = $user.id"))
	.ReturnClause({
		"uname" : "$user.name",
		"message" : "$message.message"
	});
Results
{ "uname": "MargaritaStoddard", "message": " dislike iphone its touch-screen is horrible" }
{ "uname": "MargaritaStoddard", "message": " like verizon the 3G is awesome:)" }
{ "uname": "MargaritaStoddard", "message": " can't stand motorola the touch-screen is terrible" }
{ "uname": "MargaritaStoddard", "message": " can't stand at&t the network is horrible:(" }
{ "uname": "MargaritaStoddard", "message": " can't stand at&t its plan is terrible" }
{ "uname": "IsbelDull", "message": " like samsung the plan is amazing" }
{ "uname": "IsbelDull", "message": " like t-mobile its platform is mind-blowing" }
{ "uname": "WoodrowNehling", "message": " love at&t its 3G is good:)" }
{ "uname": "BramHatch", "message": " dislike iphone the voice-command is bad:(" }
{ "uname": "BramHatch", "message": " can't stand t-mobile its voicemail-service is OMG:(" }
{ "uname": "EmoryUnk", "message": " love sprint its shortcut-menu is awesome:)" }
{ "uname": "EmoryUnk", "message": " love verizon its wireless is good" }
{ "uname": "WillisWynne", "message": " love sprint the customization is mind-blowing" }
{ "uname": "SuzannaTillson", "message": " like iphone the voicemail-service is awesome" }
{ "uname": "VonKemble", "message": " dislike sprint the speed is horrible" }

Query 3 - Nested Outer Join

AQL
use dataverse TinySocial;

for $user in dataset FacebookUsers
return {
    "uname": $user.name,
    "messages": for $message in dataset FacebookMessages
                where $message.author-id = $user.id
                return $message.message
};
JS
var expression3messages = new FLWOGRExpression()
    .ForClause("$message", new AExpression("dataset FacebookMessages"))
    .WhereClause(new AExpression("$message.author-id = $user.id"))
    .ReturnClause("$message.message");

var expression3 = new FLWOGRExpression()
    .ForClause ("$user", new AExpression("dataset FacebookUsers"))
    .ReturnClause({
        "uname": "$user.name",
        "messages" : expression3messages
    });
Results
{ "uname": "MargaritaStoddard", "messages": { orderedlist: [" dislike iphone its touch-screen is horrible", " like verizon the 3G is awesome:)", " can't stand motorola the touch-screen is terrible", " can't stand at&t the network is horrible:(", " can't stand at&t its plan is terrible" ]} }
{ "uname": "IsbelDull", "messages": { orderedlist: [" like samsung the plan is amazing", " like t-mobile its platform is mind-blowing" ]} }
{ "uname": "NilaMilliron", "messages": { orderedlist: [ ]} }
{ "uname": "WoodrowNehling", "messages": { orderedlist: [" love at&t its 3G is good:)" ]} }
{ "uname": "BramHatch", "messages": { orderedlist: [" dislike iphone the voice-command is bad:(", " can't stand t-mobile its voicemail-service is OMG:(" ]} }
{ "uname": "EmoryUnk", "messages": { orderedlist: [" love sprint its shortcut-menu is awesome:)", " love verizon its wireless is good" ]} }
{ "uname": "WillisWynne", "messages": { orderedlist: [" love sprint the customization is mind-blowing" ]} }
{ "uname": "SuzannaTillson", "messages": { orderedlist: [" like iphone the voicemail-service is awesome" ]} }
{ "uname": "NicholasStroh", "messages": { orderedlist: [ ]} }
{ "uname": "VonKemble", "messages": { orderedlist: [" dislike sprint the speed is horrible" ]} }

Query 4 - Theta Join

AQL
use dataverse TinySocial;

for $t in dataset TweetMessages
return {
    "message": $t.message-text,
    "nearby-messages": for $t2 in dataset TweetMessages
                       where spatial-distance($t.sender-location, $t2.sender-location) <= 1
                       return { "msgtxt":$t2.message-text}
};
JS
var expression4messages = new FLWOGRExpression()
    .ForClause( "$t2", new AExpression("dataset TweetMessages"))
    .WhereClause( new AExpression("spatial-distance($t.sender-location, $t2.sender-location) <= 1"))
    .ReturnClause({ "msgtxt" : "$t2.message-text" });

var expression4 = new FLWOGRExpression()
    .ForClause( "$t", new AExpression("dataset TweetMessages"))
    .ReturnClause({
        "message" : "$t.message-text",
        "nearby-messages" : expression4messages
    });
Results
{ "message": " hate verizon its voice-clarity is OMG:(", "nearby-messages": { orderedlist: [{ "msgtxt": " hate verizon its voice-clarity is OMG:(" }, { "msgtxt": " like motorola the speed is good:)" } ]} }
{ "message": " like iphone the voice-clarity is good:)", "nearby-messages": { orderedlist: [{ "msgtxt": " like iphone the voice-clarity is good:)" } ]} }
{ "message": " like samsung the platform is good", "nearby-messages": { orderedlist: [{ "msgtxt": " like samsung the platform is good" } ]} }
{ "message": " love t-mobile its customization is good:)", "nearby-messages": { orderedlist: [{ "msgtxt": " love t-mobile its customization is good:)" } ]} }
{ "message": " like samsung the voice-command is amazing:)", "nearby-messages": { orderedlist: [{ "msgtxt": " like samsung the voice-command is amazing:)" } ]} }
{ "message": " like motorola the speed is good:)", "nearby-messages": { orderedlist: [{ "msgtxt": " hate verizon its voice-clarity is OMG:(" }, { "msgtxt": " like motorola the speed is good:)" } ]} }
{ "message": " love verizon its voicemail-service is awesome", "nearby-messages": { orderedlist: [{ "msgtxt": " love verizon its voicemail-service is awesome" } ]} }
{ "message": " can't stand motorola its speed is terrible:(", "nearby-messages": { orderedlist: [{ "msgtxt": " can't stand motorola its speed is terrible:(" } ]} }
{ "message": " like t-mobile the shortcut-menu is awesome:)", "nearby-messages": { orderedlist: [{ "msgtxt": " like t-mobile the shortcut-menu is awesome:)" } ]} }
{ "message": " can't stand iphone its platform is terrible", "nearby-messages": { orderedlist: [{ "msgtxt": " can't stand iphone its platform is terrible" } ]} }
{ "message": " like verizon its shortcut-menu is awesome:)", "nearby-messages": { orderedlist: [{ "msgtxt": " like verizon its shortcut-menu is awesome:)" } ]} }
{ "message": " like sprint the voice-command is mind-blowing:)", "nearby-messages": { orderedlist: [{ "msgtxt": " like sprint the voice-command is mind-blowing:)" } ]} }

Query 5 - Fuzzy Join

AQL

use dataverse TinySocial;

set simfunction "edit-distance";
set simthreshold "3";

for $fbu in dataset FacebookUsers
return {
    "id": $fbu.id,
    "name": $fbu.name,
    "similar-users": for $t in dataset TweetMessages
                     let $tu := $t.user
                     where $tu.name ~= $fbu.name
                    return {
                        "twitter-screenname": $tu.screen-name,
                        "twitter-name": $tu.name
                    }
};
JS
var similarUsersExpression = new FLWOGRExpression()
    .ForClause("$t", new AExpression("dataset TweetMessages"))
    .LetClause ("$tu", new AExpression("$t.user"))
    .WhereClause(new AExpression("$tu.name ~= $fbu.name"))
    .ReturnClause({
        "twitter-screenname": "$tu.screen-name",
        "twitter-name": "$tu.name"
    });

var expression5 = new FLWOGRExpression()
    .ForClause ("$fbu", new AExpression("dataset FacebookUsers"))
    .ReturnClause(
        {
            "id" : "$fbu.id",
            "name" : "$fbu.name",
            "similar-users" : similarUsersExpression
        }
    );
Results
{ "id": { int32: 1 } , "name": "MargaritaStoddard", "similar-users": { orderedlist: [ ]} }
{ "id": { int32: 2 } , "name": "IsbelDull", "similar-users": { orderedlist: [ ]} }
{ "id": { int32: 8 } , "name": "NilaMilliron", "similar-users": { orderedlist: [{ "twitter-screenname": "NilaMilliron_tw", "twitter-name": "Nila Milliron" } ]} }
{ "id": { int32: 9 } , "name": "WoodrowNehling", "similar-users": { orderedlist: [ ]} }
{ "id": { int32: 10 } , "name": "BramHatch", "similar-users": { orderedlist: [ ]} }
{ "id": { int32: 3 } , "name": "EmoryUnk", "similar-users": { orderedlist: [ ]} }
{ "id": { int32: 6 } , "name": "WillisWynne", "similar-users": { orderedlist: [ ]} }
{ "id": { int32: 7 } , "name": "SuzannaTillson", "similar-users": { orderedlist: [ ]} }
{ "id": { int32: 4 } , "name": "NicholasStroh", "similar-users": { orderedlist: [ ]} }
{ "id": { int32: 5 } , "name": "VonKemble", "similar-users": { orderedlist: [ ]} }

Query 6 - Existential Quantification

AQL
use dataverse TinySocial;

for $fbu in dataset FacebookUsers
where (some $e in $fbu.employment satisfies is-null($e.end-date))
return $fbu;
JS
var expression6 = new FLWOGRExpression()
    .ForClause ("$fbu", new AQLClause().set("dataset FacebookUsers"))
    .WhereClause(
        new QuantifiedExpression (
            "some" ,
            {"$e" : new AExpression("$fbu.employment") },
            new FunctionExpression("is-null", new AExpression("$e.end-date"))
        )
    )
    .ReturnClause("$fbu");
Results
{ "id": { int32: 1 } , "alias": "Margarita", "name": "MargaritaStoddard", "user-since": { datetime: 1345457400000}, "friend-ids": { unorderedlist: [{ int32: 2 } , { int32: 3 } , { int32: 6 } , { int32: 10 } ]}, "employment": { orderedlist: [{ "organization-name": "Codetechno", "start-date": { date: 1154822400000}, "end-date": null } ]} }
{ "id": { int32: 2 } , "alias": "Isbel", "name": "IsbelDull", "user-since": { datetime: 1295691000000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 4 } ]}, "employment": { orderedlist: [{ "organization-name": "Hexviafind", "start-date": { date: 1272326400000}, "end-date": null } ]} }
{ "id": { int32: 8 } , "alias": "Nila", "name": "NilaMilliron", "user-since": { datetime: 1199182200000}, "friend-ids": { unorderedlist: [{ int32: 3 } ]}, "employment": { orderedlist: [{ "organization-name": "Plexlane", "start-date": { date: 1267315200000}, "end-date": null } ]} }
{ "id": { int32: 6 } , "alias": "Willis", "name": "WillisWynne", "user-since": { datetime: 1105956600000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 3 } , { int32: 7 } ]}, "employment": { orderedlist: [{ "organization-name": "jaydax", "start-date": { date: 1242345600000}, "end-date": null } ]} }
{ "id": { int32: 7 } , "alias": "Suzanna", "name": "SuzannaTillson", "user-since": { datetime: 1344334200000}, "friend-ids": { unorderedlist: [{ int32: 6 } ]}, "employment": { orderedlist: [{ "organization-name": "Labzatron", "start-date": { date: 1303171200000}, "end-date": null } ]} }
{ "id": { int32: 4 } , "alias": "Nicholas", "name": "NicholasStroh", "user-since": { datetime: 1293444600000}, "friend-ids": { unorderedlist: [{ int32: 2 } ]}, "employment": { orderedlist: [{ "organization-name": "Zamcorporation", "start-date": { date: 1275955200000}, "end-date": null } ]} }
{ "id": { int32: 5 } , "alias": "Von", "name": "VonKemble", "user-since": { datetime: 1262686200000}, "friend-ids": { unorderedlist: [{ int32: 3 } , { int32: 6 } , { int32: 10 } ]}, "employment": { orderedlist: [{ "organization-name": "Kongreen", "start-date": { date: 1290816000000}, "end-date": null } ]} }

Query 7 - Universal Quantification

AQL
use dataverse TinySocial;

for $fbu in dataset FacebookUsers
where (every $e in $fbu.employment satisfies not(is-null($e.end-date)))
return $fbu;
JS
var expression7 = new FLWOGRExpression()
    .ForClause("$fbu", new AExpression("dataset FacebookUsers"))
    .WhereClause(
        new QuantifiedExpression (
            "every" ,
            {"$e" : new AExpression("$fbu.employment") },
            new FunctionExpression("not", new FunctionExpression("is-null", new AExpression("$e.end-date")))
        )
    )
    .ReturnClause("$fbu");
Results
{ "id": { int32: 9 } , "alias": "Woodrow", "name": "WoodrowNehling", "user-since": { datetime: 1127211000000}, "friend-ids": { unorderedlist: [{ int32: 3 } , { int32: 10 } ]}, "employment": { orderedlist: [{ "organization-name": "Zuncan", "start-date": { date: 1050969600000}, "end-date": { date: 1260662400000} } ]} }
{ "id": { int32: 10 } , "alias": "Bram", "name": "BramHatch", "user-since": { datetime: 1287223800000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 5 } , { int32: 9 } ]}, "employment": { orderedlist: [{ "organization-name": "physcane", "start-date": { date: 1181001600000}, "end-date": { date: 1320451200000} } ]} }
{ "id": { int32: 3 } , "alias": "Emory", "name": "EmoryUnk", "user-since": { datetime: 1341915000000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 5 } , { int32: 8 } , { int32: 9 } ]}, "employment": { orderedlist: [{ "organization-name": "geomedia", "start-date": { date: 1276732800000}, "end-date": { date: 1264464000000} } ]} }

Query 8 - Simple Aggregation

AQL
use dataverse TinySocial;

count(for $fbu in dataset FacebookUsers return $fbu);
JS
var expression8 = new FunctionExpression(
    "count",
    new FLWOGRExpression()
        .ForClause("$fbu", new AExpression("dataset FacebookUsers"))
        .ReturnClause("$fbu")
);
Results
{ int64: 10 }

Query 9-A - Grouping and Aggregation

AQL
use dataverse TinySocial;

for $t in dataset TweetMessages
group by $uid := $t.user.screen-name with $t
return {
    "user": $uid,
    "count": count($t)
};
JS
var expression9a = new FLWOGRExpression()
    .ForClause("$t", new AExpression("dataset TweetMessages"))
    .GroupClause("$uid", new AExpression("$t.user.screen-name"), "with", "$t")
    .ReturnClause(
        {
            "user" : "$uid",
            "count" : new FunctionExpression("count", new AExpression("$t"))
        }
    );
Results
{ "user": "ColineGeyer@63", "count": { int64: 3 } }
{ "user": "OliJackson_512", "count": { int64: 1 } }
{ "user": "NilaMilliron_tw", "count": { int64: 1 } }
{ "user": "ChangEwing_573", "count": { int64: 1 } }
{ "user": "NathanGiesen@211", "count": { int64: 6 } }

Query 9-B - (Hash-Based) Grouping and Aggregation

AQL
use dataverse TinySocial;

for $t in dataset TweetMessages
/*+ hash*/
group by $uid := $t.user.screen-name with $t
return {
    "user": $uid,
    "count": count($t)
};
JS
var expression9b = new FLWOGRExpression()
    .ForClause("$t", new AExpression("dataset TweetMessages"))
    .AQLClause("/*+ hash*/")
    .GroupClause("$uid", new AExpression("$t.user.screen-name"), "with", "$t")
    .ReturnClause(
        {
            "user" : "$uid",
            "count" : new FunctionExpression("count", new AExpression("$t"))
        }
    );
Results
{ "user": "ColineGeyer@63", "count": { int64: 3 } }
{ "user": "OliJackson_512", "count": { int64: 1 } }
{ "user": "NilaMilliron_tw", "count": { int64: 1 } }
{ "user": "ChangEwing_573", "count": { int64: 1 } }
{ "user": "NathanGiesen@211", "count": { int64: 6 } }

Query 10 - Grouping and Limits

AQL
use dataverse TinySocial;

for $t in dataset TweetMessages
group by $uid := $t.user.screen-name with $t
let $c := count($t)
order by $c desc
limit 3
return {
    "user": $uid,
    "count": $c
};
JS
var expression10 = new FLWOGRExpression()
    .ForClause("$t", new AExpression("dataset TweetMessages"))
    .GroupClause("$uid", new AExpression("$t.user.screen-name"), "with", "$t")
    .LetClause("$c", new FunctionExpression("count", new AExpression("$t")))
    .OrderbyClause( new AExpression("$c"), "desc" )
    .LimitClause(new AExpression("3"))
    .ReturnClause(
        {
            "user" : "$uid",
            "count" : "$c"
        }
    );
Results
{ "user": "NathanGiesen@211", "count": { int64: 6 } }
{ "user": "ColineGeyer@63", "count": { int64: 3 } }
{ "user": "NilaMilliron_tw", "count": { int64: 1 } }

Query 11 - Left Outer Fuzzy Join

AQL
use dataverse TinySocial;

set simfunction "jaccard";
set simthreshold "0.3";

for $t in dataset TweetMessages
return {
    "tweet": $t,
    "similar-tweets": for $t2 in dataset TweetMessages
    where  $t2.referred-topics ~= $t.referred-topics
    and $t2.tweetid != $t.tweetid
    return $t2.referred-topics
};
JS
var expression11 = new FLWOGRExpression()
    .ForClause( "$t", new AExpression("dataset TweetMessages"))
    .ReturnClause({
        "tweet"         : new AExpression("$t"),
        "similar-tweets": new FLWOGRExpression()
                            .ForClause( "$t2", new AExpression("dataset TweetMessages"))
                            .WhereClause().and(
                                new AExpression("$t2.referred-topics ~= $t.referred-topics"),
                                new AExpression("$t2.tweetid != $t.tweetid")
                             )
                            .ReturnClause("$t2.referred-topics")
    });
Results
{ "tweet": { "tweetid": "10", "user": { "screen-name": "ColineGeyer@63", "lang": "en", "friends_count": { int32: 121 } , "statuses_count": { int32: 362 } , "name": "Coline Geyer", "followers_count": { int32: 17159 } }, "sender-location": { point: [29.15, 76.53]}, "send-time": { datetime: 1201342200000}, "referred-topics": { unorderedlist: ["verizon", "voice-clarity" ]}, "message-text": " hate verizon its voice-clarity is OMG:(" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["iphone", "voice-clarity" ]}, { unorderedlist: ["verizon", "shortcut-menu" ]}, { unorderedlist: ["verizon", "voicemail-service" ]} ]} }
{ "tweet": { "tweetid": "6", "user": { "screen-name": "ColineGeyer@63", "lang": "en", "friends_count": { int32: 121 } , "statuses_count": { int32: 362 } , "name": "Coline Geyer", "followers_count": { int32: 17159 } }, "sender-location": { point: [47.51, 83.99]}, "send-time": { datetime: 1273227000000}, "referred-topics": { unorderedlist: ["iphone", "voice-clarity" ]}, "message-text": " like iphone the voice-clarity is good:)" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["verizon", "voice-clarity" ]}, { unorderedlist: ["iphone", "platform" ]} ]} }
{ "tweet": { "tweetid": "7", "user": { "screen-name": "ChangEwing_573", "lang": "en", "friends_count": { int32: 182 } , "statuses_count": { int32: 394 } , "name": "Chang Ewing", "followers_count": { int32: 32136 } }, "sender-location": { point: [36.21, 72.6]}, "send-time": { datetime: 1314267000000}, "referred-topics": { unorderedlist: ["samsung", "platform" ]}, "message-text": " like samsung the platform is good" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["iphone", "platform" ]}, { unorderedlist: ["samsung", "voice-command" ]} ]} }
{ "tweet": { "tweetid": "1", "user": { "screen-name": "NathanGiesen@211", "lang": "en", "friends_count": { int32: 39339 } , "statuses_count": { int32: 473 } , "name": "Nathan Giesen", "followers_count": { int32: 49416 } }, "sender-location": { point: [47.44, 80.65]}, "send-time": { datetime: 1209204600000}, "referred-topics": { unorderedlist: ["t-mobile", "customization" ]}, "message-text": " love t-mobile its customization is good:)" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["t-mobile", "shortcut-menu" ]} ]} }
{ "tweet": { "tweetid": "12", "user": { "screen-name": "OliJackson_512", "lang": "en", "friends_count": { int32: 445 } , "statuses_count": { int32: 164 } , "name": "Oli Jackson", "followers_count": { int32: 22649 } }, "sender-location": { point: [24.82, 94.63]}, "send-time": { datetime: 1266055800000}, "referred-topics": { unorderedlist: ["samsung", "voice-command" ]}, "message-text": " like samsung the voice-command is amazing:)" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["samsung", "platform" ]}, { unorderedlist: ["sprint", "voice-command" ]} ]} }
{ "tweet": { "tweetid": "3", "user": { "screen-name": "NathanGiesen@211", "lang": "en", "friends_count": { int32: 39339 } , "statuses_count": { int32: 473 } , "name": "Nathan Giesen", "followers_count": { int32: 49416 } }, "sender-location": { point: [29.72, 75.8]}, "send-time": { datetime: 1162635000000}, "referred-topics": { unorderedlist: ["motorola", "speed" ]}, "message-text": " like motorola the speed is good:)" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["motorola", "speed" ]} ]} }
{ "tweet": { "tweetid": "9", "user": { "screen-name": "NathanGiesen@211", "lang": "en", "friends_count": { int32: 39339 } , "statuses_count": { int32: 473 } , "name": "Nathan Giesen", "followers_count": { int32: 49416 } }, "sender-location": { point: [36.86, 74.62]}, "send-time": { datetime: 1342865400000}, "referred-topics": { unorderedlist: ["verizon", "voicemail-service" ]}, "message-text": " love verizon its voicemail-service is awesome" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["verizon", "voice-clarity" ]}, { unorderedlist: ["verizon", "shortcut-menu" ]} ]} }
{ "tweet": { "tweetid": "5", "user": { "screen-name": "NathanGiesen@211", "lang": "en", "friends_count": { int32: 39339 } , "statuses_count": { int32: 473 } , "name": "Nathan Giesen", "followers_count": { int32: 49416 } }, "sender-location": { point: [40.09, 92.69]}, "send-time": { datetime: 1154686200000}, "referred-topics": { unorderedlist: ["motorola", "speed" ]}, "message-text": " can't stand motorola its speed is terrible:(" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["motorola", "speed" ]} ]} }
{ "tweet": { "tweetid": "8", "user": { "screen-name": "NathanGiesen@211", "lang": "en", "friends_count": { int32: 39339 } , "statuses_count": { int32: 473 } , "name": "Nathan Giesen", "followers_count": { int32: 49416 } }, "sender-location": { point: [46.05, 93.34]}, "send-time": { datetime: 1129284600000}, "referred-topics": { unorderedlist: ["t-mobile", "shortcut-menu" ]}, "message-text": " like t-mobile the shortcut-menu is awesome:)" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["verizon", "shortcut-menu" ]}, { unorderedlist: ["t-mobile", "customization" ]} ]} }
{ "tweet": { "tweetid": "11", "user": { "screen-name": "NilaMilliron_tw", "lang": "en", "friends_count": { int32: 445 } , "statuses_count": { int32: 164 } , "name": "Nila Milliron", "followers_count": { int32: 22649 } }, "sender-location": { point: [37.59, 68.42]}, "send-time": { datetime: 1205057400000}, "referred-topics": { unorderedlist: ["iphone", "platform" ]}, "message-text": " can't stand iphone its platform is terrible" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["iphone", "voice-clarity" ]}, { unorderedlist: ["samsung", "platform" ]} ]} }
{ "tweet": { "tweetid": "2", "user": { "screen-name": "ColineGeyer@63", "lang": "en", "friends_count": { int32: 121 } , "statuses_count": { int32: 362 } , "name": "Coline Geyer", "followers_count": { int32: 17159 } }, "sender-location": { point: [32.84, 67.14]}, "send-time": { datetime: 1273745400000}, "referred-topics": { unorderedlist: ["verizon", "shortcut-menu" ]}, "message-text": " like verizon its shortcut-menu is awesome:)" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["t-mobile", "shortcut-menu" ]}, { unorderedlist: ["verizon", "voice-clarity" ]}, { unorderedlist: ["verizon", "voicemail-service" ]} ]} }
{ "tweet": { "tweetid": "4", "user": { "screen-name": "NathanGiesen@211", "lang": "en", "friends_count": { int32: 39339 } , "statuses_count": { int32: 473 } , "name": "Nathan Giesen", "followers_count": { int32: 49416 } }, "sender-location": { point: [39.28, 70.48]}, "send-time": { datetime: 1324894200000}, "referred-topics": { unorderedlist: ["sprint", "voice-command" ]}, "message-text": " like sprint the voice-command is mind-blowing:)" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["samsung", "voice-command" ]} ]} }