// Copyright (C) MongoDB, Inc. 2017-present. // // Licensed under the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. You may obtain // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 package mongo import ( "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo/options" "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation" ) // ClientBulkWriteResult is the result type returned by a client-level BulkWrite operation. type ClientBulkWriteResult struct { // The number of documents inserted. InsertedCount int64 // The number of documents matched by filters in update and replace operations. MatchedCount int64 // The number of documents modified by update and replace operations. ModifiedCount int64 // The number of documents deleted. DeletedCount int64 // The number of documents upserted by update and replace operations. UpsertedCount int64 // A map of operation index to the _id of each inserted document. InsertResults map[int]ClientBulkWriteInsertResult // A map of operation index to the _id of each updated document. UpdateResults map[int]ClientBulkWriteUpdateResult // A map of operation index to the _id of each deleted document. DeleteResults map[int]ClientBulkWriteDeleteResult // Operation performed with an acknowledged write. Values for other fields may // not be deterministic if the write operation was unacknowledged. Acknowledged bool // HasVerboseResults indicates whether this result contains verbose results. HasVerboseResults bool } // ClientBulkWriteInsertResult is the result type returned by a client-level bulk write of InsertOne operation. type ClientBulkWriteInsertResult struct { // The _id of the inserted document. A value generated by the driver will be of type primitive.ObjectID. InsertedID any } // ClientBulkWriteUpdateResult is the result type returned from a client-level bulk write of UpdateOne, UpdateMany, and ReplaceOne operation. type ClientBulkWriteUpdateResult struct { MatchedCount int64 // The number of documents matched by the filter. ModifiedCount int64 // The number of documents modified by the operation. UpsertedID any // The _id field of the upserted document, or nil if no upsert was done. } // ClientBulkWriteDeleteResult is the result type returned by a client-level bulk write DeleteOne and DeleteMany operation. type ClientBulkWriteDeleteResult struct { DeletedCount int64 // The number of documents deleted. } // BulkWriteResult is the result type returned by a BulkWrite operation. type BulkWriteResult struct { // The number of documents inserted. InsertedCount int64 // The number of documents matched by filters in update and replace operations. MatchedCount int64 // The number of documents modified by update and replace operations. ModifiedCount int64 // The number of documents deleted. DeletedCount int64 // The number of documents upserted by update and replace operations. UpsertedCount int64 // A map of operation index to the _id of each upserted document. UpsertedIDs map[int64]any // Operation performed with an acknowledged write. Values for other fields may // not be deterministic if the write operation was unacknowledged. Acknowledged bool } // InsertOneResult is the result type returned by an InsertOne operation. type InsertOneResult struct { // The _id of the inserted document. A value generated by the driver will be of type bson.ObjectID. InsertedID any // Operation performed with an acknowledged write. Values for other fields may // not be deterministic if the write operation was unacknowledged. Acknowledged bool } // InsertManyResult is a result type returned by an InsertMany operation. type InsertManyResult struct { // The _id values of the inserted documents. Values generated by the driver will be of type bson.ObjectID. InsertedIDs []any // Operation performed with an acknowledged write. Values for other fields may // not be deterministic if the write operation was unacknowledged. Acknowledged bool } // TODO(GODRIVER-2367): Remove the BSON struct tags on DeleteResult. // DeleteResult is the result type returned by DeleteOne and DeleteMany operations. type DeleteResult struct { DeletedCount int64 // The number of documents deleted. // Operation performed with an acknowledged write. Values for other fields may // not be deterministic if the write operation was unacknowledged. Acknowledged bool } // RewrapManyDataKeyResult is the result of the bulk write operation used to update the key vault collection with // rewrapped data keys. type RewrapManyDataKeyResult struct { *BulkWriteResult } // ListDatabasesResult is a result of a ListDatabases operation. type ListDatabasesResult struct { // A slice containing one DatabaseSpecification for each database matched by the operation's filter. Databases []DatabaseSpecification // The total size of the database files of the returned databases in bytes. // This will be the sum of the SizeOnDisk field for each specification in Databases. TotalSize int64 } func newListDatabasesResultFromOperation(res operation.ListDatabasesResult) ListDatabasesResult { var ldr ListDatabasesResult ldr.Databases = make([]DatabaseSpecification, 0, len(res.Databases)) for _, spec := range res.Databases { ldr.Databases = append( ldr.Databases, DatabaseSpecification{Name: spec.Name, SizeOnDisk: spec.SizeOnDisk, Empty: spec.Empty}, ) } ldr.TotalSize = res.TotalSize return ldr } // DatabaseSpecification contains information for a database. This type is returned as part of ListDatabasesResult. type DatabaseSpecification struct { Name string // The name of the database. SizeOnDisk int64 // The total size of the database files on disk in bytes. Empty bool // Specifies whether or not the database is empty. } // UpdateResult is the result type returned from UpdateOne, UpdateMany, and ReplaceOne operations. type UpdateResult struct { MatchedCount int64 // The number of documents matched by the filter. ModifiedCount int64 // The number of documents modified by the operation. UpsertedCount int64 // The number of documents upserted by the operation. UpsertedID any // The _id field of the upserted document, or nil if no upsert was done. // Operation performed with an acknowledged write. Values for other fields may // not be deterministic if the write operation was unacknowledged. Acknowledged bool } // IndexSpecification represents an index in a database. This type is returned by the IndexView.ListSpecifications // function and is also used in the CollectionSpecification type. type IndexSpecification struct { // The index name. Name string // The namespace for the index. This is a string in the format "databaseName.collectionName". Namespace string // The keys specification document for the index. KeysDocument bson.Raw // The index version. Version int32 // The length of time, in seconds, for documents to remain in the collection. The default value is 0, which means // that documents will remain in the collection until they're explicitly deleted or the collection is dropped. ExpireAfterSeconds *int32 // If true, the index will only reference documents that contain the fields specified in the index. The default is // false. Sparse *bool // If true, the collection will not accept insertion or update of documents where the index key value matches an // existing value in the index. The default is false. Unique *bool // The clustered index. Clustered *bool } type indexListSpecificationResponse struct { Name string `bson:"name"` Namespace string `bson:"ns"` KeysDocument bson.Raw `bson:"key"` Version int32 `bson:"v"` ExpireAfterSeconds *int32 `bson:"expireAfterSeconds"` Sparse *bool `bson:"sparse"` Unique *bool `bson:"unique"` Clustered *bool `bson:"clustered"` } // CollectionSpecification represents a collection in a database. This type is returned by the // Database.ListCollectionSpecifications function. type CollectionSpecification struct { // The collection name. Name string // The type of the collection. This will either be "collection" or "view". Type string // Whether or not the collection is readOnly. ReadOnly bool // The collection UUID as a bson.Binary with subtype 4. UUID *bson.Binary // A document containing the options used to construct the collection. Options bson.Raw // An IndexSpecification instance with details about the collection's _id index. IDIndex IndexSpecification } // DistinctResult represents an array of BSON data returned from an operation. // If the operation resulted in an error, all DistinctResult methods will return // that error. If the operation did not return any data, all DistinctResult // methods will return ErrNoDocuments. type DistinctResult struct { err error arr bson.RawArray reg *bson.Registry bsonOpts *options.BSONOptions } // Decode will unmarshal the array represented by this DistinctResult into v. If // there was an error from the operation that created this DistinctReuslt, that // error will be returned. If the operation returned no array, Decode will // return ErrNoDocuments. // // If the operation was successful and returned an array, Decode will return any // errors from the unmarshalling process without any modification. If v is nil // or is a typed nil, an error will be returned. func (dr *DistinctResult) Decode(v any) error { doc := bsoncore.NewDocumentBuilder(). AppendValue("arr", bsoncore.Value{ Type: bsoncore.TypeArray, Data: dr.arr, }).Build() dec := getDecoder(doc, dr.bsonOpts, dr.reg) return dec.Decode(&struct{ Arr any }{Arr: v}) } // Err provides a way to check for query errors without calling Decode. Err // returns the error, if any, that was encountered while running the operation. // If the operation was successful but did not return any documents, Err returns // ErrNoDocuments. If this error is not nil, this error will also be returned // from Decode. func (dr *DistinctResult) Err() error { return dr.err } // Raw returns the document represented by this DistinctResult as a bson.Raw. If // there was an error from the operation that created this DistinctResult, both // the result and that error will be returned. If the operation returned no // documents, this will return (nil, ErrNoDocuments). func (dr *DistinctResult) Raw() (bson.RawArray, error) { if dr.err != nil { return nil, dr.err } return dr.arr, nil }