MongoDB中db.getCollection.find和db.tablename.find有什么区别?

9

什么是以下两种方式的区别:

db.getCollection('booking').find()

并且

db.booking.find()

它们完全相同吗?何时应该使用哪个?
db.getCollection('booking').find({_id:"0J0DR"})

db.booking.find({_id:"0J0DR"})

3
这是您所需的全部内容:https://docs.mongodb.com/manual/reference/method/db.getCollection/ - martskins
1
那个人解释说insertOne不起作用,或者什么的 :-D 说实话,docs.mongodb.com很糟糕,他们的示例很糟糕,描述也不清楚(你不能只是复制粘贴并尝试它)。我在stackoverflow上找到的示例要好得多!!无论如何,看起来它们完全相同。 - torbenrudgaard
文档中的示例是正确的。您无法在db.auth上执行insertOne,但如果您使用db.getCollection(“auth”)则可以执行它(这显然不同)。在我看来,这些文档相当不错。 - martskins
3个回答

12

是的,它们完全相同,您可以使用任意一个。

第一种形式db.getCollection(collectionName).find()在集合名称包含特殊字符会使另一种语法无效时变得方便。

例如: 假设您的集合名称以_开头、匹配数据库shell方法或包含空格,则可以使用db.getCollection("booking trips").find()db["booking trips"].find(),而db.booking trips.find()无法实现。


1
谢谢 - 他们文档中的“设置光标”让我感到困惑。在MemoDB中,您可以设置光标,然后使用一个命令逐行浏览行,并使用另一个命令获取所有行 :) - torbenrudgaard
确实,文档的某些部分需要注意或缺少一些重要信息,您可以在SO上进行补充 :) - chridam

1
我更喜欢使用db.collection(),因为它可以在不存在的集合上工作,这在例如创建尚不存在的users集合中的第一个用户时非常有用。
db.collection('users').findOneAndUpdate(...) // Won't throw even if the collection doesn't exist yet

0
除了之前的答案,对于shell来说它们可能完全相同,但在实际的IDE(如PyCharm)中,db.getCollection(collectionName)即使没有find()方法也会返回整个文档。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接