如何只返回MongoDB中的值

发布于

当您使用 MongoDB 等方法时,默认情况下您会返回整个文档。如果使用投影,则可以返回特定的键/值对。[find()](https://database.guide/mongodb-find/ "MongoDB find()")``[findOne()](https://database.guide/mongodb-findone/ "MongoDB findOne()")

但是,如果您只想要价值呢?

通过使用 时,可以通过将该字段的名称追加到查询中来提取字段的值。findOne()

例

假设我们有一个包含以下文档的集合:products

{ “_id” : 1, “product” : “Bat”, “sizes” : [ “S”, “M”, “L” ] } { “_id” : 2, “product” : “Hat”, “sizes” : [ “S”, “L”, “XL” ] } { “_id” : 3, “product” : “Cap”, “sizes” : [ “M”, “L” ] }

如果我们想返回第一个文档的产品,我们可以执行以下操作:

db.products.findOne().product

输出:

Bat

请注意,我们使用了该方法。此技术不适用于该方法。该方法返回单个文档,而该方法仅返回文档的光标。findOne()``find()``findOne()``find()

如果我们想返回数组,我们可以这样做:

db.products.findOne().sizes

输出:

[ "S", "M", "L" ]

我们可以通过引用它的索引来获取数组值:

db.products.findOne().sizes[0]

输出:

S

数组从零开始,因此引用数组中的第一个元素,引用第二个元素,第三个元素,依此类推。0``1``2

具体文档

默认情况下,该方法返回集合中的第一个文档。我们可以通过指定将查询传递为第一个参数来选择不同的文档。findOne()

我说“第一个参数”是因为也接受一个参数作为可选的第二个参数。findOne()``projection

db.products.findOne({_id: 2}, {sizes: 1, _id: 0}).sizes

结果:

[ "S", "L", "XL" ]

在这种情况下,我添加了一个投影参数,但它对结果没有影响。但是如果我指定值 0,它会产生影响。这将导致不归还任何东西。

嵌入式文档

可以使用点表示法从嵌入文档中返回值

示例文档:

{ “_id” : 1, “name” : “Wag”, “details” : { “type” : “Dog”, “weight” : 20 } }

我们可以执行以下操作来从嵌入文档中返回一个值:

db.pets.findOne().details.type

输出:

Dog