Files
MultiforaDB/tests/spec/positional/all-positional.json
A.Shakhmatov e5a84c0598 tests/spec: a recorded corpus for the positional operators
M3's gate as named -- "remaining crud coverage; e2e3/e2e4 green" -- cannot
see this work. e2e3 and e2e4 contain zero positional paths, and the pinned
crud corpus covers `$[<identifier>]` only: no `$[]` case, no bare `$` case
anywhere in it. Both stayed green through a bug that replaced an array with
`{"$[i]": {...}}` and answered ok: 1. So M3 brings its own corpus, built the
way M2.5's was: inputs authored in `sources/`, every expectation recorded
from mongod 8.3.7, run through the shared runner with `--suite-dir`.

51 cases across the three spellings. It stands at 15 pass / 36 fail against
the refusal, which is the intended shape -- `expressions.json` was recorded
at 1 pass / 26 fail before the evaluator and is green now. The 15 that pass
are refusals where this server's code already matches; of the 36, 31 are the
constructs answering "not implemented" and 5 are refusals whose code
differs, four of them arrayFilters validation this server cannot do because
it never parses the option.

Every case records its `outcome`, refusals included. That is deliberate and
it is the whole point of the file: a refusal that left the document mangled
is indistinguishable from a clean one in `expectError` alone, and a mangled
document is what this corpus exists to catch.

What recording it settled, none of it guessable, the first contradicting
what the design review assumed:

  - `y.$[i].c.$[i].d`, one identifier reused at two levels, is **accepted**
    -- not a duplicate-identifier error
  - `$[]` over an empty array is a no-op with modifiedCount 0
  - `$[]` over an array with a non-document element is error 28, where every
    other path failure here is 2
  - a positional segment never creates: a missing or non-array path is an
    error, where `$set: {'a.b': 1}` would construct one
  - an upsert gets no special case -- it fails for the same reason
  - `$` writes only the first matching element, and is refused when the query
    never touched the array
  - any of the three in first position is refused, as is `$` twice in a path
  - `arrayFilters` alongside a replacement is ignored rather than refused

A case needing its own documents reseeds through operations rather than
`initialData`, because the format's `initialData` is per file and the runner
seeds it once per test. That keeps one file per operator instead of one file
per document shape.

crud scorecard unchanged at 204/87, aggregation corpus still 70/0.
2026-08-10 19:00:01 +03:00

861 lines
17 KiB
JSON

{
"description": "all-positional",
"schemaVersion": "1.4",
"createEntities": [
{
"client": {
"id": "client0"
}
},
{
"database": {
"id": "database0",
"client": "client0",
"databaseName": "positional-corpus"
}
},
{
"collection": {
"id": "collection0",
"database": "database0",
"collectionName": "coll"
}
}
],
"initialData": [
{
"collectionName": "coll",
"databaseName": "positional-corpus",
"documents": [
{
"_id": 1,
"y": [
{
"b": 3
},
{
"b": 1
}
]
},
{
"_id": 2,
"y": []
},
{
"_id": 3,
"y": [
{
"c": [
{
"d": 1
},
{
"d": 2
}
]
},
{
"c": [
{
"d": 3
}
]
}
]
}
]
}
],
"tests": [
{
"description": "every element of the array is written",
"operations": [
{
"object": "collection0",
"name": "updateOne",
"arguments": {
"filter": {
"_id": 1
},
"update": {
"$set": {
"y.$[].b": 9
}
}
},
"expectResult": {
"matchedCount": 1,
"modifiedCount": 1,
"upsertedCount": 0
}
}
],
"outcome": [
{
"collectionName": "coll",
"databaseName": "positional-corpus",
"documents": [
{
"_id": 1,
"y": [
{
"b": 9
},
{
"b": 9
}
]
},
{
"_id": 2,
"y": []
},
{
"_id": 3,
"y": [
{
"c": [
{
"d": 1
},
{
"d": 2
}
]
},
{
"c": [
{
"d": 3
}
]
}
]
}
]
}
]
},
{
"description": "nested $[] is a cross-product over both levels",
"operations": [
{
"object": "collection0",
"name": "updateOne",
"arguments": {
"filter": {
"_id": 3
},
"update": {
"$set": {
"y.$[].c.$[].d": 0
}
}
},
"expectResult": {
"matchedCount": 1,
"modifiedCount": 1,
"upsertedCount": 0
}
}
],
"outcome": [
{
"collectionName": "coll",
"databaseName": "positional-corpus",
"documents": [
{
"_id": 1,
"y": [
{
"b": 3
},
{
"b": 1
}
]
},
{
"_id": 2,
"y": []
},
{
"_id": 3,
"y": [
{
"c": [
{
"d": 0
},
{
"d": 0
}
]
},
{
"c": [
{
"d": 0
}
]
}
]
}
]
}
]
},
{
"description": "$[] over an empty array",
"operations": [
{
"object": "collection0",
"name": "updateOne",
"arguments": {
"filter": {
"_id": 2
},
"update": {
"$set": {
"y.$[].b": 9
}
}
},
"expectResult": {
"matchedCount": 1,
"modifiedCount": 0,
"upsertedCount": 0
}
}
],
"outcome": [
{
"collectionName": "coll",
"databaseName": "positional-corpus",
"documents": [
{
"_id": 1,
"y": [
{
"b": 3
},
{
"b": 1
}
]
},
{
"_id": 2,
"y": []
},
{
"_id": 3,
"y": [
{
"c": [
{
"d": 1
},
{
"d": 2
}
]
},
{
"c": [
{
"d": 3
}
]
}
]
}
]
}
]
},
{
"description": "$inc through $[] adds to every element",
"operations": [
{
"object": "collection0",
"name": "updateOne",
"arguments": {
"filter": {
"_id": 1
},
"update": {
"$inc": {
"y.$[].b": 10
}
}
},
"expectResult": {
"matchedCount": 1,
"modifiedCount": 1,
"upsertedCount": 0
}
}
],
"outcome": [
{
"collectionName": "coll",
"databaseName": "positional-corpus",
"documents": [
{
"_id": 1,
"y": [
{
"b": 13
},
{
"b": 11
}
]
},
{
"_id": 2,
"y": []
},
{
"_id": 3,
"y": [
{
"c": [
{
"d": 1
},
{
"d": 2
}
]
},
{
"c": [
{
"d": 3
}
]
}
]
}
]
}
]
},
{
"description": "$[] as the leaf over an array of scalars",
"operations": [
{
"object": "collection0",
"name": "deleteMany",
"arguments": {
"filter": {}
}
},
{
"object": "collection0",
"name": "insertMany",
"arguments": {
"documents": [
{
"_id": 1,
"y": [
1,
2,
3
]
}
]
}
},
{
"object": "collection0",
"name": "updateOne",
"arguments": {
"filter": {},
"update": {
"$set": {
"y.$[]": 0
}
}
},
"expectResult": {
"matchedCount": 1,
"modifiedCount": 1,
"upsertedCount": 0
}
}
],
"outcome": [
{
"collectionName": "coll",
"databaseName": "positional-corpus",
"documents": [
{
"_id": 1,
"y": [
0,
0,
0
]
}
]
}
]
},
{
"description": "$unset through $[] removes a field from every element",
"operations": [
{
"object": "collection0",
"name": "deleteMany",
"arguments": {
"filter": {}
}
},
{
"object": "collection0",
"name": "insertMany",
"arguments": {
"documents": [
{
"_id": 1,
"y": [
{
"b": 1,
"e": 1
},
{
"b": 2,
"e": 2
}
]
}
]
}
},
{
"object": "collection0",
"name": "updateOne",
"arguments": {
"filter": {},
"update": {
"$unset": {
"y.$[].e": ""
}
}
},
"expectResult": {
"matchedCount": 1,
"modifiedCount": 1,
"upsertedCount": 0
}
}
],
"outcome": [
{
"collectionName": "coll",
"databaseName": "positional-corpus",
"documents": [
{
"_id": 1,
"y": [
{
"b": 1
},
{
"b": 2
}
]
}
]
}
]
},
{
"description": "$[] where an element is not a document",
"operations": [
{
"object": "collection0",
"name": "deleteMany",
"arguments": {
"filter": {}
}
},
{
"object": "collection0",
"name": "insertMany",
"arguments": {
"documents": [
{
"_id": 1,
"y": [
{
"b": 1
},
7
]
}
]
}
},
{
"object": "collection0",
"name": "updateOne",
"arguments": {
"filter": {},
"update": {
"$set": {
"y.$[].b": 9
}
}
},
"expectError": {
"isError": true,
"errorCode": 28
}
}
],
"outcome": [
{
"collectionName": "coll",
"databaseName": "positional-corpus",
"documents": [
{
"_id": 1,
"y": [
{
"b": 1
},
7
]
}
]
}
]
},
{
"description": "updateMany with $[] across every document",
"operations": [
{
"object": "collection0",
"name": "updateMany",
"arguments": {
"filter": {
"_id": {
"$in": [
1,
2
]
}
},
"update": {
"$set": {
"y.$[].b": 9
}
}
},
"expectResult": {
"matchedCount": 2,
"modifiedCount": 1,
"upsertedCount": 0
}
}
],
"outcome": [
{
"collectionName": "coll",
"databaseName": "positional-corpus",
"documents": [
{
"_id": 1,
"y": [
{
"b": 9
},
{
"b": 9
}
]
},
{
"_id": 2,
"y": []
},
{
"_id": 3,
"y": [
{
"c": [
{
"d": 1
},
{
"d": 2
}
]
},
{
"c": [
{
"d": 3
}
]
}
]
}
]
}
]
},
{
"description": "$[] where the path does not exist",
"operations": [
{
"object": "collection0",
"name": "deleteMany",
"arguments": {
"filter": {}
}
},
{
"object": "collection0",
"name": "insertMany",
"arguments": {
"documents": [
{
"_id": 1,
"z": 1
}
]
}
},
{
"object": "collection0",
"name": "updateOne",
"arguments": {
"filter": {},
"update": {
"$set": {
"y.$[].b": 9
}
}
},
"expectError": {
"isError": true,
"errorCode": 2
}
}
],
"outcome": [
{
"collectionName": "coll",
"databaseName": "positional-corpus",
"documents": [
{
"_id": 1,
"z": 1
}
]
}
]
},
{
"description": "$[] where the path is not an array",
"operations": [
{
"object": "collection0",
"name": "deleteMany",
"arguments": {
"filter": {}
}
},
{
"object": "collection0",
"name": "insertMany",
"arguments": {
"documents": [
{
"_id": 1,
"y": 5
}
]
}
},
{
"object": "collection0",
"name": "updateOne",
"arguments": {
"filter": {},
"update": {
"$set": {
"y.$[].b": 9
}
}
},
"expectError": {
"isError": true,
"errorCode": 2
}
}
],
"outcome": [
{
"collectionName": "coll",
"databaseName": "positional-corpus",
"documents": [
{
"_id": 1,
"y": 5
}
]
}
]
},
{
"description": "$[] in first position is refused",
"operations": [
{
"object": "collection0",
"name": "updateOne",
"arguments": {
"filter": {
"_id": 1
},
"update": {
"$set": {
"$[]": 9
}
}
},
"expectError": {
"isError": true,
"errorCode": 2
}
}
],
"outcome": [
{
"collectionName": "coll",
"databaseName": "positional-corpus",
"documents": [
{
"_id": 1,
"y": [
{
"b": 3
},
{
"b": 1
}
]
},
{
"_id": 2,
"y": []
},
{
"_id": 3,
"y": [
{
"c": [
{
"d": 1
},
{
"d": 2
}
]
},
{
"c": [
{
"d": 3
}
]
}
]
}
]
}
]
},
{
"description": "$[] combined with an identifier in one path",
"operations": [
{
"object": "collection0",
"name": "updateOne",
"arguments": {
"filter": {
"_id": 3
},
"update": {
"$set": {
"y.$[].c.$[j].d": 0
}
},
"arrayFilters": [
{
"j.d": 2
}
]
},
"expectResult": {
"matchedCount": 1,
"modifiedCount": 1,
"upsertedCount": 0
}
}
],
"outcome": [
{
"collectionName": "coll",
"databaseName": "positional-corpus",
"documents": [
{
"_id": 1,
"y": [
{
"b": 3
},
{
"b": 1
}
]
},
{
"_id": 2,
"y": []
},
{
"_id": 3,
"y": [
{
"c": [
{
"d": 1
},
{
"d": 0
}
]
},
{
"c": [
{
"d": 3
}
]
}
]
}
]
}
]
}
]
}