diff options
Diffstat (limited to 'jstests/aggregation/sources')
-rw-r--r-- | jstests/aggregation/sources/sort/sort_with_metadata.js | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/jstests/aggregation/sources/sort/sort_with_metadata.js b/jstests/aggregation/sources/sort/sort_with_metadata.js new file mode 100644 index 00000000000..ab4d7ce5b83 --- /dev/null +++ b/jstests/aggregation/sources/sort/sort_with_metadata.js @@ -0,0 +1,47 @@ +// Test that the $sort stage properly errors on invalid $meta. +(function() { +"use strict"; + +var coll = db.sort_with_metadata; +coll.drop(); +assert.writeOK(coll.insert({_id: 1, text: "apple", words: 1})); +assert.writeOK(coll.insert({_id: 2, text: "banana", words: 1})); +assert.writeOK(coll.insert({_id: 3, text: "apple banana", words: 2})); +assert.writeOK(coll.insert({_id: 4, text: "cantaloupe", words: 1})); + +assert.commandWorked(coll.createIndex({text: "text"})); + +assert.throws(() => coll.aggregate([ + {$match: {$text: {$search: 'apple banana'}}}, + {$sort: {textScore: {$meta: 'searchScore'}}} +])); + +assert.throws(() => coll.aggregate([ + {$match: {$text: {$search: 'apple banana'}}}, + {$sort: {textScore: {$meta: 'searchHighlights'}}} +])); + +assert.throws( + () => coll.aggregate( + [{$match: {$text: {$search: 'apple banana'}}}, {$sort: {textScore: {$meta: 'unknown'}}}])); + +const results = [ + {_id: 3, text: 'apple banana', words: 2}, + {_id: 2, text: 'banana', words: 1}, + {_id: 1, text: 'apple', words: 1} +]; + +assert.eq(results, + coll.aggregate([ + {$match: {$text: {$search: 'apple banana'}}}, + {$sort: {textScore: {$meta: 'textScore'}}} + ]) + .toArray()); + +assert.sameMembers(results, + coll.aggregate([ + {$match: {$text: {$search: 'apple banana'}}}, + {$sort: {textScore: {$meta: 'randVal'}}} + ]) + .toArray()); +})();
\ No newline at end of file |