关于DBRef类型的mongodb查询

关于DBRef类型的mongodb查询,mongodb,mongodb-query,mongo-shell,dbref,Mongodb,Mongodb Query,Mongo Shell,Dbref,如何在mongodb shell中的有效mongodb查询中转换此查询 { 'cars.owner.$ref' : 'users' } cars.owner在这里是DBRef,但$ref无效 我得到这个错误: "$err" : "Positional operator does not match the query specifier." 我的目标是找出是否有任何汽车“拥有”给不同的收藏品和用户。您可以在Mongo shell中查询DBRef,但必须使用DBRef()函数。参考必须至少包

如何在mongodb shell中的有效mongodb查询中转换此查询

{ 'cars.owner.$ref' : 'users' } 
cars.owner
在这里是DBRef,但
$ref
无效

我得到这个错误:

"$err" : "Positional operator does not match the query specifier."

我的目标是找出是否有任何汽车“拥有”给不同的收藏品和用户。

您可以在Mongo shell中查询DBRef,但必须使用DBRef()函数。参考必须至少包括以下文件中的$ref和$id:

DBRef文档类似于以下文档:

{ "$ref" : <value>, "$id" : <value>, "$db" : <value> }
MongoDB文档()说明了以下内容:

MongoDB应用程序使用以下两种方法之一来关联文档:

  • 手动引用,将一个文档的_id字段保存在另一个文档中作为引用。然后,应用程序可以运行第二个查询以返回相关数据。这些引用对于大多数用例来说都是简单和足够的
  • DBREF是从一个文档到另一个文档的引用,使用第一个文档的_id字段的值、集合名称以及(可选)其数据库名称。通过包含这些名称,DBREF允许位于多个集合中的文档更容易与单个集合中的文档链接。要解析DBREF,应用程序必须执行其他查询以返回引用的文档。许多驱动程序都有自动形成DBRef查询的助手方法。驱动程序不会自动将DBREF解析为文档
我不知道有什么计划,但我读到DBRefs现在应该被弃用(?)。但是,您可以使用fetch()-方法加载引用的文档。例如,我有一个formView集合,它存储的文档包含对formContent集合中文档的(DBRef)引用。因此,跑步:

var view = db.formView.findOne()
view.formContent
view.formContent.fetch()
view.formContent.fetch().code
…将产生以下输出:

DBRef("formContent", ObjectId("56cb155ea826872b67373e76"))
{
    "_id" : ObjectId("56cb155ea826872b67373e76"),
    "code" : "test_content",
    "version" : 0
}
test_content
:DBRef(“CollectionName”、“id值”)

放入集合。然后创建一个以feild name作为parameterName的Bean,并放入morphia orm的@Reference注释,然后执行所需操作

当您只允许引用一个集合时,通常最好只存储_id而不是DBRef。@Philipp我只是在探索数据。仅仅存储_id而不是DBRef的动机是什么?DBRef基本上被认为是不受欢迎的,我对未来持续的驱动程序支持不抱太大希望。这是一个早期的想法,不是一个很好的构思。该格式存储的字段名也与现在为保留字符建立的命名约定冲突。现在的一般惯例是只存储文档的
\u id
,也可以选择自己存储集合和/或数据库名称空间,或者通过描述关系的外部模式逻辑和
\u id
。坚持DBRef是一条充满恐怖的黑暗之路。请尽快离开。@BlakesSeven在文档中我在哪里可以找到DBRef已弃用?@WillemD'haeseleer DBRef是一个包含_id、集合和数据库(可选)的对象。在大多数情况下,您已经知道将在其中找到引用的集合和数据库,因此它们是无用的膨胀。请参阅并添加一些描述。此答案毫无意义
var view = db.formView.findOne()
view.formContent
view.formContent.fetch()
view.formContent.fetch().code
DBRef("formContent", ObjectId("56cb155ea826872b67373e76"))
{
    "_id" : ObjectId("56cb155ea826872b67373e76"),
    "code" : "test_content",
    "version" : 0
}
test_content
<parameterName>: DBRef("CollectionName", "_id Value")