问题标签 [object-identity]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
13197 浏览

sql - OBJECT_ID 在 SQL Server 中的作用是什么?

我正在尝试使用并在 MSDN中OBJECT_ID找到以下条目:

“返回模式范围对象的数据库对象标识号。”

什么是数据库对象标识号,什么是架构范围对象。似乎我比最初更困惑。

0 投票
1 回答
1163 浏览

django - 如何从通用更新视图中获取我的对象 ID 以在 django 1.1 中的表单中使用

我正在使用通用视图来更新对象。

我正在使用表格:

我正在使用这个通用视图:

但是我有一个错误,因为我的表单上的 object_id 是未知的......我怎样才能让我的请求对象 id 在我的表单中使用干净?

谢谢

编辑:这里的错误:

未定义全局名称“object_id”

0 投票
1 回答
1497 浏览

mongodb - mongodb 中的 $all 参数不适用于 ObjectId 列表

我检索了一个 ObjectId 列表,我想使用参数 $all 检索我的 mongo 数据库中的所有对象

我正在使用 pymongo,我的请求如下所示:

但是请求返回的游标计数为 0 但是当我执行此请求时:

它还给我一个好对象

有谁知道为什么它不起作用?

0 投票
2 回答
367 浏览

node.js - 使用 _id 引用时哪个最有利于性能?使用 _id 检索时,我收到错误 INVALID OBJECT ID

我应该如何引用另一个集合中的集合,唯一的用户名或默认 _id(对象 id)或插入新记录时递增的普通 id。我读到对象 ids 提高了 mongoose 的性能,但我无法使用 _ids 检索记录作为它给出的错误 INVALID OBJECT ID 。使用其他键(如用户名)检索时我没有收到错误。但随着 _id 提高性能,我正在尝试使用它。

我在定义模式时尝试了这两种方法,

1) _id 没有定义,因为它会自动创建

2)我这样定义_id:_id:{类型:Schema.ObjectId}

在这两种方式中,我在检索记录时都收到错误“无效的对象 ID”

谢谢

0 投票
3 回答
227 浏览

python - 哪些对象可以保证具有不同的身份?

原始问题:

(我的问题适用于 Python 3.2+,但我怀疑自 Python 2.7 以来这已经改变了。)

假设我使用我们通常期望创建对象的表达式。例子:[1,2,3]; 42; 'abc'; range(10); True; open('readme.txt'); MyClass(); lambda x : 2 * x; 等等

假设两个这样的表达式在不同的时间执行并且“计算为相同的值”(即,具有相同的类型,并且比较为相等)。在什么条件下,Python 提供了我所谓的不同对象保证这两个表达式实际上创建了两个不同的对象(即,x is y计算为False,假设两个对象绑定到xand y,并且两者同时在范围内)?

我知道对于任何可变类型的对象,“不同的对象保证”成立:

我也知道对于某些不可变类型(str, int),保证不成立;对于某些其他不可变类型(bool, NoneType),相反的保证成立:

但是所有其他不可变类型呢?

特别是,在不同时间创建的两个元组可以具有相同的身份吗?

我对此感兴趣的原因是我将图中的节点表示为 的元组int,并且域模型使得任何两个节点都是不同的(即使它们由具有相同值的元组表示)。我需要创建节点集。如果 Python 保证在不同时间创建的元组是不同的对象,我可以简单地进行子类化tuple以将相等性重新定义为表示同一性:

但是,如果不能保证在不同时间创建的元组是不同的,那么上述是一种可怕的技术,它隐藏了一个可能随机出现并且可能很难复制和查找的休眠错误。在这种情况下,子类化将无济于事。我实际上需要向每个元组添加一个额外的元素,一个唯一的 id。或者,我可以将我的元组转换为列表。无论哪种方式,我都会使用更多的内存。显然,除非我原来的子类化解决方案不安全,否则我不希望使用这些替代方案。

我的猜测是 Python 不为不可变类型提供“不同的对象保证”,无论是内置的还是用户定义的。但是我在文档中没有找到关于它的明确声明。

更新 1:

@LuperRouch @larsmans 感谢您到目前为止的讨论和答案。这是我仍然不清楚的最后一个问题:

是否有可能创建用户定义类型的对象会导致重用现有对象?

如果这是可能的,我想知道如何验证我使用的任何类是否可能表现出这种行为。

这是我的理解。每当创建用户定义类的对象时,__new__()首先调用该类的方法。如果重写此方法,则语言中的任何内容都不会阻止程序员返回对现有对象的引用,从而违反了我的“不同对象保证”。显然,我可以通过检查类定义来观察它。

我不确定如果用户定义的类没有覆盖__new__()(或明确依赖__new__()于基类)会发生什么。如果我写

对象创建由int.__new__(). 我希望这意味着我有时可能会看到以下断言失败:

但是在我对 CPython 的实验中,我无法实现这种行为。这是否意味着该语言为不覆盖的用户定义类提供“不同的对象保证” __new__,或者它只是一种任意的实现行为?

更新 2:

虽然DistinctTuple结果证明我是一个非常安全的实现,但我现在明白我使用DistinctTuple节点建模的设计理念非常糟糕。

身份运算符已经在该语言中可用;make 的==行为方式与is逻辑上是多余的相同。

更糟糕的是,如果==可以做一些有用的事情,我就让它不可用。例如,很可能在我的程序中的某个地方,我想查看两个节点是否由同一对整数表示;==本来是完美的-实际上,这就是默认情况下的作用...

更糟糕的是,大多数人实际上确实希望==比较一些“价值”而不是身份——即使对于用户定义的类也是如此。他们会因为我只看身份的覆盖而措手不及。

最后......我必须重新定义的唯一原因==是允许具有相同元组表示的多个节点成为集合的一部分。这是错误的做法!需要改变的不是==行为,而是容器类型!我只需要使用多重集合而不是集合。

简而言之,虽然我的问题可能对其他情况有一些价值,但我绝对相信创建class DistinctTuple对我的用例来说是一个糟糕的主意(我强烈怀疑它根本没有有效的用例)。

0 投票
4 回答
400 浏览

ruby - 为什么 Ruby 倾向于按降序分配对象 ID?

我注意到对象的 ID 以违反直觉的方式分配。对象创建得越早,其对象 ID 就越大。我原以为它们会按升序分配,而不是相反。

例如:

为什么它们以这种方式分配,为什么在 Ruby 解释器运行的代码中有 20 步而不是 1 步,但是 Ruby 的 irb 运行的代码的对象 ID 之间的差异要大得多?

0 投票
1 回答
3496 浏览

ios - 如何从 url 获取 objectID?

我的代码如下:

然后我想得到这样的反对:

但 objID 为零。哪里不对了 ?怎么做 ?谢谢你 !

0 投票
2 回答
642 浏览

php - mongoDB 不允许我更新

好的,这个问题让我发疯了,我认为 _id 应该是 ObjectID,而当我尝试使用 _id 更新它时它第一次插入它时它会正确执行它不起作用。

这是我的代码

我试图做followinf

但这似乎无济于事。

发生的事情是它第一次正确插入 ObjectID(idnumber) 然后当它进行更新时删除 ObjectID() 并插入一个与以前相同的 idnumber 的新潜在客户

所以它看起来像“IDNUMBER”

0 投票
1 回答
1531 浏览

mongodb - DDD 和 MongoDB:让 Mongo 创建 ObjectID 可以吗?

根据 DDD(蓝皮书,Evans),工厂有责任创建处于有效状态的聚合根。这是否意味着它应该能够创建技术 id(mongoDB 世界中的 objectId)以及域 id?

一方面,这似乎是一个技术细节,让 Mongo 处理 ID 的创建似乎没问题。

另一方面,启用按 id 查询(通过getById在 DDD 存储库中)将技术 id 暴露给域,这反过来又会使工厂负责创建它。

也许我无法理解技术 ID 与 DomainId 的不同用例/重叠等,或者我可能过于热心,但无论如何我都会很感激你的意见。

简而言之:在 DDD 中:工厂是否应该能够创建技术 ID 以及域 ID?

可能的实现:Hi/Lo(如何在 MongoDB Norm 中设置 hilo 序列起始值?

编辑:虽然 hi/lo 方式将工厂暴露给持久层,但只有存储库应该知道。嗯

谢谢

0 投票
2 回答
189 浏览

ocaml - 什么时候在 OCaml 中创建物理上不同的值?

我试图了解 OCaml 中的物理相等运算符 (Pervasives.(==)Pervasives.(!=)) 的含义。

语言手册说表达式""是“常量”,而不是“表达式”:

6.5 常数

常量::== ...字符串文字

但我找不到任何表示常量是单独/预评估或池化的措辞,并且 REPL 表示可变字符串值(谢天谢地)没有被池化。

19.3 OCaml 数据类型的表示”部分建议语言规范要求 bools、ints、chars、单位值、简单变体和空列表是无私的。

实现是否必须像上面那样才能成为符合 OCaml 的实现?

兼容的 OCaml 实现是否可以重写指针b以指向a何时a = b (* structurally *)为真,并且两者都是不可变类型的值(或有效的不可变值,如零长度字符串/数组),有时这样做是为了减少一代中可到达的较年轻值的数量GC?