我正在尝试通过自动生成的_id字段查找文档。以下代码不返回任何内容:
var documentID bson.RawValue
documentID.Type = 7
documentID.Value = []byte("5c7452c7aeb4c97e0cdb75bf")
objID := documentID.ObjectID()
value := collection.FindOne(ctx, bson.M{"_id": objID})
Run Code Online (Sandbox Code Playgroud)
我提供的值是我从Mongo Express获得的真实文档ID
"_id": ObjectID("5c7452c7aeb4c97e0cdb75bf")
Run Code Online (Sandbox Code Playgroud)
如果您想知道为什么要打扰RawValue,我发现了使用bson.EC.ObjectID的示例,但bson包似乎没有EC类型,还发现了一些示例,其中提到了github.com/mongodb/mongo-go-driver / bson / objectid软件包,但是我也找不到该软件包。我以前是使用mgo开发的,但是我是mongo-go-driver的新手,因此,如果您可以指出一种简单的方法来声明ObjectID。
我在我的项目中使用 Azure Cosmos DB 和 MongoDB Api,该项目是使用 Golang 和 MongoDB Go 驱动程序开发的。当我尝试使用下面的代码获取计数时出现错误Invalid response from server, value field is not a number
itemCount, err := myCollection.CountDocuments(ctx, bson.D{{"$and", bson.A{bson.M{"userid": user.ID, "siteid": site.ID}}}})
Run Code Online (Sandbox Code Playgroud)
当我在 MongoDB 数据库上尝试时,相同的代码返回项目数(在本例中为 532)。然后,我决定通过编写一个简单的 .Net 应用程序来尝试相同的查询,该应用程序在 MongoDB 和 CosmosDB 上都运行良好。下面是我使用的代码,它532为两个数据库打印。
var count = database.GetCollection<Model>("myCollection").CountDocuments(filter);
Console.WriteLine(count);
Run Code Online (Sandbox Code Playgroud)
我还尝试通过 Robo3T 查询这两个数据库。该查询从 MongoDBdb.getCollection('Consents').count({})返回532,而同一查询NumberLong(532)从 CosmosDB 返回。
我将这一行为写到了 MSDN 论坛,但没有人信赖。我什至不确定这是数据库 API 还是驱动程序的问题。就驱动程序而言,它可以与 MongoDB 配合使用,这也是它向我承诺的。就数据库 api 而言,它与 .Net 驱动程序一起使用,它告诉我 Microsoft 很清楚这种行为,并发现它可以接受并在其驱动程序中处理它。有人知道如何克服这种情况吗?