即使在mongodb nodejs中使用find投影,我也无法限制字段

时间:2017-12-28 17:59:31

标签: node.js mongodb

我在find方法mongodb nodejs中有一个投影问题。我的结果包含所有字段。

见下面的代码:

我想只有姓名和年龄字段。我测试下面的代码和一些组合。

db.db("TodoApp").collection("Users").find(
    {
        Age:{$lte:20},       
        $and:[{Name:{$in:["Gh","dd","Mahdi"]}},{Location:"Mashhad"}]
    },
    {
        _id:0,
        Name:1,
        Age:1,
    }).toArray().then((docs)=>{
        console.log("Users");
        console.log(JSON.stringify(docs,undefined,2));
    },(error)=>{
        console.log("Unable to fetch Users");
    }) ;

结果是一样的:你可以看到下面的jsons

Users
[


{
    "_id": "5a4010d286d6152734f13f00",
    "Name": "Mahdi",
    "Location": "Mashhad",
    "Age": 20
  },
  {
    "_id": "5a4010d286d6152734f13f01",
    "Name": "Gh",
    "Location": "Mashhad",
    "Age": 20
  },
  {
    "_id": "5a401115c7320c1e0400b692",
    "Name": "Mahdi",
    "Location": "Mashhad",
    "Age": 20
  },
  {
    "_id": "5a40116cbf000c2128670648",
    "Name": "Mahdi",
    "Location": "Mashhad",
    "Age": 20
  },
  {
    "_id": "5a401174da2a7127b8b649d7",
    "Name": "Mahdi",
    "Location": "Mashhad",
    "Age": 20
  },
  {
    "_id": "5a401174da2a7127b8b649d8",
    "Name": "Mahdi",
    "Location": "Mashhad",
    "Age": 18
  }
]

我测试了很多查询,但仍存在问题

db.db("TodoApp").collection("Users").find(query8,{Name:0}).toArray((error,result)=>{
    console.log(JSON.stringify(result,undefined,2));
});


db.db("TodoApp").collection("Users").find(query8,{Name:1}).toArray((error,result)=>{
        console.log(JSON.stringify(result,undefined,2));
    });

结果包含所有字段。

2 个答案:

答案 0 :(得分:1)

var query8={
     Location:null
 }
var prj={
    _id:0,
    Name:1
};

db.db("TodoApp").collection("Users").find(query8).project(prj).toArray((error,result)=>{
    console.log(JSON.stringify(result,undefined,2));
});

输出:

Connected to mongodb server
[
  {
    "Name": "Ghazanfar"
  },
  {
    "Name": "Sara"
  }
]

当我使用project()时,没关系。

答案 1 :(得分:0)

  

投影不能混合包含和排除。

因此,如果您只想要使用年龄和名称,那么

{
    _id:0,
    Name:1,
    Age:1
}

但如果你不想看到位置;

{
   Location:0
}