summaryrefslogtreecommitdiff
path: root/jstests/core/fts_projection.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/fts_projection.js')
-rw-r--r--jstests/core/fts_projection.js48
1 files changed, 29 insertions, 19 deletions
diff --git a/jstests/core/fts_projection.js b/jstests/core/fts_projection.js
index 60bb445a7b3..50fe4755fc3 100644
--- a/jstests/core/fts_projection.js
+++ b/jstests/core/fts_projection.js
@@ -8,10 +8,11 @@ db.adminCommand({setParameter: 1, newQueryFrameworkEnabled: true});
t.insert({_id: 0, a: "textual content"});
t.insert({_id: 1, a: "additional content", b: -1});
t.insert({_id: 2, a: "irrelevant content"});
-t.ensureIndex({a:"text"});
+t.ensureIndex({a: "text"});
// Project the text score.
-var results = t.find({$text: {$search: "textual content -irrelevant"}}, {_idCopy:0, score:{$meta: "textScore"}}).toArray();
+var results = t.find({$text: {$search: "textual content -irrelevant"}},
+ {_idCopy: 0, score: {$meta: "textScore"}}).toArray();
// printjson(results);
// Scores should exist.
assert.eq(results.length, 2);
@@ -28,7 +29,8 @@ scores[results[1]._id] = results[1].score;
//
// Project text score into 2 fields.
-results = t.find({$text: {$search: "textual content -irrelevant"}}, {otherScore: {$meta: "textScore"}, score:{$meta: "textScore"}}).toArray();
+results = t.find({$text: {$search: "textual content -irrelevant"}},
+ {otherScore: {$meta: "textScore"}, score: {$meta: "textScore"}}).toArray();
assert.eq(2, results.length);
for (var i = 0; i < results.length; ++i) {
assert.close(scores[results[i]._id], results[i].score);
@@ -38,18 +40,22 @@ for (var i = 0; i < results.length; ++i) {
// printjson(results);
// Project text score into "x.$" shouldn't crash
-assert.throws(function() { t.find({$text: {$search: "textual content -irrelevant"}}, {'x.$': {$meta: "textScore"}}).toArray(); });
+assert.throws(function() {
+ t.find({$text: {$search: "textual content -irrelevant"}}, {'x.$': {$meta: "textScore"}})
+ .toArray();
+});
// TODO: We can't project 'x.y':1 and 'x':1 (yet).
// Clobber an existing field and behave nicely.
-results = t.find({$text: {$search: "textual content -irrelevant"}},
- {b: {$meta: "textScore"}}).toArray();
+results =
+ t.find({$text: {$search: "textual content -irrelevant"}}, {b: {$meta: "textScore"}}).toArray();
assert.eq(2, results.length);
for (var i = 0; i < results.length; ++i) {
- assert.close(scores[results[i]._id], results[i].b,
- i + ': existing field in ' + tojson(results[i], '', true) +
- ' is not clobbered with score');
+ assert.close(
+ scores[results[i]._id],
+ results[i].b,
+ i + ': existing field in ' + tojson(results[i], '', true) + ' is not clobbered with score');
}
assert.neq(-1, results[0].b);
@@ -59,35 +65,40 @@ var results = t.find({a: /text/}, {score: {$meta: "textScore"}}).toArray();
// printjson(results);
// No textScore proj. with nested fields
-assert.throws(function() { t.find({$text: {$search: "blah"}}, {'x.y':{$meta: "textScore"}}).toArray(); });
+assert.throws(function() {
+ t.find({$text: {$search: "blah"}}, {'x.y': {$meta: "textScore"}}).toArray();
+});
// SERVER-12173
// When $text operator is in $or, should evaluate first
results = t.find({$or: [{$text: {$search: "textual content -irrelevant"}}, {_id: 1}]},
- {_idCopy:0, score:{$meta: "textScore"}}).toArray();
+ {_idCopy: 0, score: {$meta: "textScore"}}).toArray();
printjson(results);
assert.eq(2, results.length);
for (var i = 0; i < results.length; ++i) {
- assert.close(scores[results[i]._id], results[i].score,
+ assert.close(scores[results[i]._id],
+ results[i].score,
i + ': TEXT under OR invalid score: ' + tojson(results[i], '', true));
}
// SERVER-12592
-// When $text operator is in $or, all non-$text children must be indexed. Otherwise, we should produce
+// When $text operator is in $or, all non-$text children must be indexed. Otherwise, we should
+// produce
// a readable error.
var errorMessage = '';
-assert.throws( function() {
+assert.throws(function() {
try {
t.find({$or: [{$text: {$search: "textual content -irrelevant"}}, {b: 1}]}).itcount();
- }
- catch (e) {
+ } catch (e) {
errorMessage = e;
throw e;
}
}, null, 'Expected error from failed TEXT under OR planning');
-assert.neq(-1, errorMessage.message.indexOf('TEXT'),
+assert.neq(-1,
+ errorMessage.message.indexOf('TEXT'),
'message from failed text planning does not mention TEXT: ' + errorMessage);
-assert.neq(-1, errorMessage.message.indexOf('OR'),
+assert.neq(-1,
+ errorMessage.message.indexOf('OR'),
'message from failed text planning does not mention OR: ' + errorMessage);
// Scores should exist.
@@ -96,4 +107,3 @@ assert(results[0].score,
"invalid text score for " + tojson(results[0], '', true) + " when $text is in $or");
assert(results[1].score,
"invalid text score for " + tojson(results[0], '', true) + " when $text is in $or");
-