Проверка документов в выпуске MongoDB

Так что я очень новичок в MongoDB и, конечно, отзывы о том, когда документы не проходят проверку, несколько... неинформативны. Поэтому я надеюсь, что кто-нибудь может увидеть ошибки, которые я сделал.

Схема относительно проста и работает:

db.createCollection("observations", {
    autoIndexId : true, 
    validator : { 
        $jsonSchema: {
            bsonType: "object", 
            required: [ "observationTimestamp", "family", "species", "numAnimals" ], 
            properties: { 
                observationTimestamp: { 
                    bsonType: "long", 
                    description: "Time that the animal(s) were observed. Use 'Date.parse()' syntax when inserting records. Required field. Example: 'Date.parse('Tue, 12 Dec 1995 16:17:18 GMT')'." 
                }, 
                family: { 
                    bsonType: "string", 
                    description: "Vernacular name of group which species belongs to. Required field. Must be a string." 
                }, 
                species: { 
                    bsonType: "string", 
                    description: "Scientific name of observed animal. Required field. Must be a string." 
                }, 
                numAnimals: { 
                    bsonType: "int", 
                    minimum: 1,
                    description: "Number of animals observed. Required field. Must be an integer." 
                } 
            } 
        } 
    } 
} );

Я использую здесь "long" для Date.parse(), так как я узнал, что он возвращает 64-битное целое число. Я также пытался использовать типы дат "date" и "timestamp" безрезультатно.

Моя вставка тогда:

db.observations.insert([
    {
        "observationTimestamp" : Date.parse("Mon, 25 Dec 1995 12:34:56 GMT"),
        "family" : "Sharks",
        "species" : "Carcharodon carcharias",
        "numAnimals" : 3
    },
    {
        "observationTimestamp" : Date.parse("Tue, 12 Dec 1995 16:17:18 GMT"),
        "family" : "Sharks",
        "species" : "Carcharias taurus",
        "numAnimals" : 4
    }
]);

Ошибка, выдаваемая при запуске команды, является общей:

BulkWriteResult({
        "writeErrors" : [
                {
                        "index" : 0,
                        "code" : 121,
                        "errmsg" : "Document failed validation",
                        "op" : {
                                "_id" : ObjectId("5a5e4291aa4da4bdfe1a234c"),
                                "observationTimestamp" : 819894896000,
                                "family" : "Sharks",
                                "species" : "Carcharodon carcharias",
                                "numAnimals" : 3
                        }
                }
        ],
        "writeConcernErrors" : [ ],
        "nInserted" : 0,
        "nUpserted" : 0,
        "nMatched" : 0,
        "nModified" : 0,
        "nRemoved" : 0,
        "upserted" : [ ]
})

Это использует сервер MongoDB версии 3.6. Я работаю на платформе Windows 10 (если это что-то значит).

Единственное, о чем я мог подумать, это использовать bsonType 'number' для numAnimals, но это тоже не сработало.

Любые полезные мысли или комментарии будут оценены!

1 ответ

Решение

Ваша проверка требует, чтобы "наблюдения Timestamp" и "numAnimals" как тип int и long.

Так что при вставке ассоциируйте правильный тип.

Что-то вроде

db.observations.insert([
    {
        "observationTimestamp" : NumberLong(Date.parse("Mon, 25 Dec 1995 12:34:56 GMT")),
        "family" : "Sharks",
        "species" : "Carcharodon carcharias",
        "numAnimals" : NumberInt(3)
    }
]);
Другие вопросы по тегам