如何在mongoDB中找到单个字段而不是整个文档

时间:2018-02-12 13:36:46

标签: node.js mongodb

我想达到

获得的结果
SELECT AGE FROM COLL WHERE NAME="AYUSH";

我采取了以下方法

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  var dbo = db.db("new");
  //var query = { name:'ayush' };
  //var age = {age : 1, _id:0};
  dbo.collection("coll").find( 
       { name:'ayush' },
       { age : 1, _id:0}).toArray(function(err, result) {
    if (err) throw err;
    console.log(result);
    db.close();
  });
});

我得到的结果是

[ { _id: 5a818b71d2029813505d736a,
name: 'ayush',
age: '22',
sex: 'm' } ]

2 个答案:

答案 0 :(得分:0)

来自MongoDB文档:Project Fields to Return from Query

  

返回指定字段和仅_id字段

     

投影可以通过设置显式包含多个字段   投影文档中的<field>1。以下操作   返回与查询匹配的所有文档。仅在结果集中   默认情况下,item, status字段会返回_id字段   匹配文件。

     

db.inventory.find( { status: "A" }, { item: 1, status: 1 } )

     

该操作对应于以下SQL语句:

     

SELECT _id, item, status from inventory WHERE status = "A"

在您的情况下,如果您只想要字段age,则必须删除其他字段_idnamesex,如下所示:

dbo.collection("coll").find({ name:'ayush' },{age:1, _id:0, name:0, sex:0})...

答案 1 :(得分:0)

最简单的方法是将结果转换为数组,然后将该数组作为响应发送。

代码如下:

dbo.collection("coll").find( 
       { name:'ayush' },
       { age : 1, _id:0}).toArray(function(err, result) {
    if (err) throw err;
    var array = [];
    array.push(coll[0].age);
    res.send(array);});

此外,不要使用mongoClient,而是使用mongoose。更容易和更好