在DBREF型MongoDB的查询(mongodb query on DBRef type)

2019-10-24 10:10发布

如何在MongoDB中壳有效的MongoDB查询把这个查询。

{ 'cars.owner.$ref' : 'users' } 

cars.owner是DBREF这里,但$ref无效

我得到这个错误:

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

我在这里的目的是要弄清楚是否有“国有”,由不同的集合,那么用户的任何汽车。

Answer 1:

MongoDB的文档( 数据库参考 )说以下内容:

MongoDB的应用程序使用的两种方法有关文件之一:

  • 手册参考下保存在另一个文件作为参考一个文档的_id领域。 那么你的应用程序可以运行第二个查询返回的相关数据。 这些提法很简单,足以满足大多数使用情况。
  • 是DBREFS使用的第一个文档的_id领域,集合名称的值从一个到另一个文件的引用,以及可选,它的数据库名称。 通过包括这些名字,让DBREFS位于多个集合文件从一个文件集合更容易地联系在一起。 要解决DBREFS,应用程序必须执行额外的查询返回被引用的文件。 许多司机有自动形成了DBREF查询辅助方法。 司机1不会自动解析到DBREFS文件。

我不知道任何的计划,但我已阅读,应该DBREFS被弃用(?)现在。 但是,您可以使用取() - 方法加载引用的文件。 例如,我有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


Answer 2:

您可以查询DBREF在蒙戈外壳,但你必须使用DBREF()函数。 参考必须至少包括$ ref和$ ID。 从文档 :

DBREF文件类似于以下文件:

 { "$ref" : <value>, "$id" : <value>, "$db" : <value> } 

当cars.owner是在收集用户的文档的引用,查询找到所有的车在那里的主人是某_id可能看起来像(假设两个集合在同一个数据库):

db.cars.find({ "owner" : DBRef("users", ObjectId("<user _id value>")) })

在$ ref和$ ID值不能直接查询。 该DBREF是在有同一文档在不同的藏品多次引用的情况下非常有用。 使用DBREF可能是矫枉过正的时候,只有一个文件中引用,如其他人所说。

如果您需要在业主现场引用不同的集合,你可能会更好,通过使用单独owner_collection和owner_id领域提供服务。 查询发现,没有用户会则是一个标准的查询所有业主:

db.cars.find({ owner_collection: { $ne: "users" } })


Answer 3:

<parameterName>: DBRef("CollectionName", "_id Value")

放在collection.Then创建一个bean有费尔德名作为参数名称,并把吗啡ORM的@Reference注释,然后做你想做的操作



文章来源: mongodb query on DBRef type