如何只返回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