validateDBMetadata
On this page
Definition
New in version 5.0.
validateDBMetadata-
The
validateDBMetadatacommand checks that the stored metadata of a database or a collection is valid within a particular API version.validateDBMetadatareports errors, but does not have the capability to fix errors.
Syntax
The command has the following syntax:
db.runCommand( { validateDBMetadata: 1, apiParameters: { version: <string>, strict: <boolean>, deprecationErrors: <boolean> }, db: <string>, collection: <string>, } )
Command Fields
The command takes the following fields:
| Field | Type | Description |
|---|---|---|
| apiParameters | document | All Fields are Required.
|
db | string | Optional. The name of the database to validate. If no database is specified, all databases will be validated. |
collection | string | Optional. The name of the collection or view to validate. If no collection or view is specified, all collections in the database specified by db will be validated. If no database is specified, all collections in all databases will be validated. |
Behavior
-
Validate all collections in all databases, reporting APIStrictError and APIVersionError error responses.
db.runCommand( { validateDBMetadata: 1, apiParameters: { version: "1", strict: true, deprecationErrors: true }, })
-
Validate all collections in
inventory:db.runCommand( { validateDBMetadata: 1, apiParameters: { version: "1", strict: true, deprecationErrors: true }, db: "inventory", })
-
Validate the
salescollection in theinventorydatabase:db.runCommand( { validateDBMetadata: 1, apiParameters: { version: "1", strict: true, deprecationErrors: true }, db: "inventory", collection: "sales", })
-
Validate any and all
salescollections across all databases:db.runCommand( { validateDBMetadata: 1, apiParameters: { version: "1", strict: true, deprecationErrors: true }, collection: "sales", })
Note
Your user must have the validate privilege action on all collections you want to validate.
Output
{
apiVersionErrors: [
{
ns: <string>,
code: <int>,
codeName: <string>,
errmsg: <string>
}
],
ok: <int>,
hasMoreErrors: <boolean>,
}
validateDBMetadata.ok-
If the command fails,
okis set to1. Otherwise,okis set to0.validateDBMetadata.okmay have a value of0and still report validation errors.
Example
Use the sample Query API code to create a sales collection in mongosh:
db.sales.insertMany([ { "_id" : 1, "item" : "shoes", "price" : 10, "quantity" : 2, "date" : ISODate("2021-01-01T08:00:00Z") }, { "_id" : 2, "item" : "hat", "price" : 20, "quantity" : 1, "date" : ISODate("2021-02-03T09:00:00Z") }, { "_id" : 3, "item" : "gloves", "price" : 5, "quantity" : 5, "date" : ISODate("2021-02-03T09:05:00Z") }, { "_id" : 4, "item" : "pants", "price" : 10, "quantity" : 10, "date" : ISODate("2021-02-15T08:00:00Z") }, { "_id" : 5, "item" : "socks", "price" : 5, "quantity" : 10, "date" : ISODate("2021-02-15T09:05:00Z") }, { "_id" : 6, "item" : "shirt", "price" : 5, "quantity" : 5, "date" : ISODate("2021-02-15T12:05:10Z") }, { "_id" : 7, "item" : "belt", "price" : 5, "quantity" : 10, "date" : ISODate("2021-02-15T14:12:12Z") }, { "_id" : 8, "item" : "blouse", "price" : 10, "quantity" : 5, "date" : ISODate("2021-03-16T20:20:13Z") } ])
Add a text index on the item field.
db.sales.createIndex( { item: "text" } )
Validate the sales collection for strict compliance with API version 1 and include deprecationErrors in the output.
db.runCommand( { validateDBMetadata: 1, apiParameters: { version: "1", strict: true, deprecationErrors: true }, collection: "sales", })
validateDBMetadata reports an APIStrictError on the item_text index.
{
apiVersionErrors: [
{
ns: 'test.sales',
code: 323,
codeName: 'APIStrictError',
errmsg: 'The index with name item_text is not allowed in API version 1.'
}
],
ok: 1,
hasMoreErrors: false,
}