我想知道是否有人知道是否可以使用如下查询来查询 _id 字段:
{$lte : ObjectId(....) , $gte : ObjectId(...)
Run Code Online (Sandbox Code Playgroud)
, 代替
{$in : [ObjectId( )...lots of ObjectId.....]}
Run Code Online (Sandbox Code Playgroud)
如果性能有所提高(我认为是这样..)
谢谢
在我的应用程序中,我让mongo通过其ObjectId方法生成订单ID.
但是在用户测试中,我们有一些担心订单ID是人为的"恐吓",即如果你需要通过电话与某人讨论你的订单,读出24个字母数字字符有点单调乏味.
与此同时,我真的不想存储两个不同的id,一个是"人类可访问的",另一个是内部使用的mongo.
所以我的问题是 - 有没有办法选择长度为6或甚至8的mongo objectId字符串的子字符串,我可以相当确定它是唯一的?
例如,如果我有像这样的mongo objectid
id = '4b28dcb61083ed3c809e0416'
Run Code Online (Sandbox Code Playgroud)
也许我可以拿出来
human_id = id.substr(0,7);
Run Code Online (Sandbox Code Playgroud)
并确保我总是为我的订单获得唯一的ID ...
当然,优点是这些是订单,人类创造的也是如此,因此每毫秒不会有数百万.另一方面,如果两个订单具有相同的缩短ID,那真的会成为一个问题......
---更清楚的解释---
我想问一个更好的问题是:
例如,如果我决定只使用mongo id的最后6个字符,是否有某种"概率"度量,这些6个字符在给定的一周内会重复?
给定一定数量的mongo并行运行,一周内有一定数量的用户等.
您如何为批量更新中的每个文档创建唯一的对象 ID?
我试过了,
db.foo.update({ objectId: null }, { $set: { objectId: new ObjectId() }}, { multi: true })
Run Code Online (Sandbox Code Playgroud)
但这为每个文档提供了相同的对象 ID。
Meteor的文档说它默认使用STRING作为_id.它的含义是什么?如果我编写一个脚本来导入一个巨大的csv文件,但想给每个文件一个随机字符串,我该怎么办?
我正在尝试使用龙卷风,我的用例是通过对象 ID 进行查询。
我已经看到示例和 ref 可以通过任何其他方式进行查询,但 ObjectID 除外。因为它是独一无二的,所以我想用它来代替查询。
关于如何使用 ObjectId 进行电机查询的任何建议
我想验证objectID是否是有效的mongoID字符串.
目前我有:
import bson
try:
bson.objectid.ObjectId(id)
except:
pass # do something
Run Code Online (Sandbox Code Playgroud)
我想让我的异常更具体,看起来有一个解决方案,但except bson.objectid.InvalidId最终还是有TypeError: id must be an instance of (str, unicode, ObjectId).
好的,我试图进一步查看并发现is_valid方法但bson.is_valid(1)导致另一个错误TypeError: BSON data must be an instance of a subclass of str.
那么如何正确检查我的objectID是否有效?
mongoose.mongo.Types.ObjectId 没有 fromString 或 fromHexString 函数。似乎 new mongoose.mongo.Types.ObjectId(hexString) 也不会创建对象 ID。
var id = new mongoose.Types.ObjectId(hexString);
db.Record.find({_id:id }, function (err, campaign){
if(err) console.log(err);
callback(campaign);
});
Run Code Online (Sandbox Code Playgroud) 在创建函数时,我倾向于在创建前加上存在性检查
IF Object_ID(N'myfunc', N'IF') IS NOT NULL
DROP FUNCTION myfunc
GO
CREATE FUNCTION myfunc...
Run Code Online (Sandbox Code Playgroud)
有几种类型的object_id要检查函数:
FN = SQL scalar function
IF = SQL inline table-valued function
TF = SQL table-valued-function
FT = Assembly (CLR) table-valued function
Run Code Online (Sandbox Code Playgroud)
我有一些问题 :
'IF','TF'和'FT' 类型有什么区别?
它非常容易出错
IF Object_ID(N'myFunc', 'IF') IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
因为某个时候函数是标量,其他情况下它是表值等,所以我可能会错过正确的类型检查.
我看到人们推荐
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'myfunc') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
Run Code Online (Sandbox Code Playgroud)
检查所有类型的功能是否足够?你有什么建议?
我已经更改了所有 C# 实体:
public ObjectId Id { get; set; }
Run Code Online (Sandbox Code Playgroud)
对此:
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
Run Code Online (Sandbox Code Playgroud)
因为我需要使用 Rebus 并发送 Id,但如果不添加自定义序列化程序,则 ObjectId 不可序列化。实际上字符串在其他地方更方便(例如:MVC 控制器中的模型绑定)。
无论如何,我认为更改不会有问题,但现在我尝试将 ObjectId 反序列化为字符串时遇到异常:我的 ApplicationUser 类有一个
IEnumerable<string> Friendships { get; set; }
Run Code Online (Sandbox Code Playgroud)
包含来自友谊实体的 Id 列表。它们是作为 ObjectId 创建的,但现在我想将它们作为字符串处理...我现在如何在代码中处理它?
我在核心数据实体中有几项作业,其 jobId 为 -1。我需要获取所有这些项目并通过在我的对象中通过 updateMyJobs 方法传递的正确 id 更新 jobId。我还没有提取 NSManagedObject 类来处理核心数据(即 - 我已经将实体检查为类定义)
这是我的代码:
func updateMyJobs(jobId: Int){
managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "DBJobsNearBy")
fetchRequest.predicate = NSPredicate(format: "jobId = '-1'")
let result = try? managedObjectContext.fetch(fetchRequest)
let resultData = result as! [DBJobsNearBy]
for object in resultData {
print(object.jobId)
if object.jobId == -1 {
object.setValue("\(jobId)", forKey: "jobId")
}
}
do {
try managedObjectContext.save()
print("saved!")
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
}
}
Run Code Online (Sandbox Code Playgroud)
我传递了一些整数值并调用上面的方法来更新这样的项目。 …