通常,您不能在 C# 中使用 ObjectId 作为可选参数,因为 ObjectId 是一个没有“设计时常量”默认值的结构。
ObjectId.Empty 是一个执行代码的属性,出于同样的原因,不允许使用 default(ObjectId)。
有谁有关于如何创建工作设计时间常数以便以下语句起作用的解决方案?(这不是真正的方法,只是一个例子)
MyObject LoadOrCreate(ObjectId id = somedefaultvalue)
{}
Run Code Online (Sandbox Code Playgroud)
如果我用上面的例子尝试这个,它不会编译?
我当然可以使用该方法的单独重载,但我宁愿使用选项而不是重载。
正如我在对第一个答案的评论中指出的,可为空是一个选项,但我宁愿不使用它,因为必须转换回不可为空。
所以我仍在寻找一些“更好”的解决方案;)
我是MongoDB和Mongoid的新手,Mongoid 3.1.4用于我的Rails(3.2.13)应用程序.我在遗留代码中看到人们使用两者type: Moped::BSON::ObjectId和type: String某处的参考模型.
例
class Team
include Mongoid::Document
field :room_id, type: String
field :leader_id, type: Moped::BSON::ObjectId
...
end
Run Code Online (Sandbox Code Playgroud)
(使用git blame我知道由2个不同的人写的这两行)
我做了一个搜索,但没有找到问题的答案何时/为什么使用什么类型?String要么Moped::BSON::ObjectId
谢谢,
我正在尝试使用PHP提取Mongo ID ObjectId的十六进制代码.每当我尝试提取ID号并将其存储在另一个变量中时,就会出现此错误.
var_dumping由Mongo查询提取的文档的内容给出如下内容:
object(MongoId)#242 (1) { ["$id"]=> string(24) "52795dc1613f4547710000df" }
Run Code Online (Sandbox Code Playgroud)
所以要获得$ id字符串,我这样做:
$mongo = new MongoClient("mongodb://username:password@localhost/database");
$db = $mongo->selectDb("database");
$collection = $db->selectCollection("someCollection");
$doc = $collection->find( /* some query to get a document here */ )->getNext();
$recordId = $doc["_id"]['$id'];
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误:
PHP Fatal error: Cannot use object of type MongoId as array
Run Code Online (Sandbox Code Playgroud) 我正在使用Meteor并且有一个关于覆盖Meteor用于用户ID的默认行为的问题.
我希望用户可以通过_idObjectId类型的字段进行唯一标识,而不是Meteor默认使用的任何类型(字符串?).是否有类似配置参数的东西,我可以设置为了这样的情况?
根据新MongoDB Java驱动程序2.12的API文档,可以看到 将字符串转换为ObjectId的方法已弃用,将在3.x驱动程序中删除.
我们应该重写使用的代码是什么?文档没有说明这一点.
object_id为0为1,1为3,2为5.
为什么这种模式是这样的?Fixnums背后的内容是什么来创建object_ids模式?我希望如果0有id 1,1有id 2,2有id 3 ..依此类推.
我错过了什么?
至少到多一点20_000_000,该object_id号码s为2倍的数目+ 1:
1454.object_id # => 2909
Run Code Online (Sandbox Code Playgroud)
当调用object_id大号时,不保留此格式.似乎理论上可以有对象数量的内置限制.我跑了:
ids = []
100_000_000.times { ids << String.new.object_id }
ids.max # => 22314984
ids.uniq.count # => 44301
Run Code Online (Sandbox Code Playgroud)
因此,在100,000,000个字符串对象中,只有大约50,000个字符串实际上是唯一的.这意味着99.95%的这些对象是同一个对象.我不确定为什么会这样.
如果需要将文档插入MongoDB,如何手动生成ObjectID?
可以用shell吗?
谢谢
我有一个ID的字符串数组,我想与find函数一起使用。
db.companies.find( { _id : { $in : arr} });
Run Code Online (Sandbox Code Playgroud)
arr 看起来像这样
[ '563a2c60b511b7ff2c61e938', '563a2c60b511b7ff2c61e8b7' ];
Run Code Online (Sandbox Code Playgroud)
我从不接受数组的文档中看到ObjectID()。如何搜索具有此数组的文档列表?我是否必须重新创建数组,以便所有元素都是ObjectID?
我有一个具有以下文档结构的集合:
{
"_id" : ObjectId("58aa706c658d1dc6c700002c"),
"source" : "web",
"type" : "Comentarios",
"email" : "jhondoe@xyz.com",
"updated_at" : ISODate("2017-02-20T04:28:28.623Z"),
"created_at" : ISODate("2017-02-20T04:28:28.623Z")
}
Run Code Online (Sandbox Code Playgroud)
我需要在Redash语法中构建一个查询以通过'_id'获取文档.我构建了以下查询,但总是出现错误:"查询格式无效.查询不是有效的JSON."
{
"collection": "commerce_messages",
"query" : {
"_id": "ObjectId(58aa706c658d1dc6c700002c)"
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试将ObjectId括在引号上,但查询不返回结果.
我发现的唯一文档是在这个链接:https://redash.io/help/queries/querying_mongodb.html但他们没有解释如何查询ObjectId.