有没有办法只返回Mongoose模式中定义的字段?

时间:2016-09-24 07:29:18

标签: node.js mongodb mongoose find schema

假设我有一个集合People,其中包含以下文档:

{
   "name": "John",
   "age": 25,
   "gender": "male"
}

文档的两个模式,一个应该返回所有信息,另一个只返回信息的子集:

var Person = mongoose.Schema({ "name": String, "age": Number, "gender": String}, {collection: "People");
var PersonName = mongoose.Schema({ "name": String }, {collection: "People"});

如何让PersonName仅返回姓名?

目前,我有一个包含大量不必要信息的文档,并且在使用.find()时只想返回数据的子集。我已经定义了一个模式并手动设置了它的集合。与定义的Schema相反,它返回所有字段。

2 个答案:

答案 0 :(得分:1)

无需定义另一个模式来从集合中获取特定属性。只需在find()函数中指定要返回的属性作为投影选项。

Schema.find(query,options,callbackFunction);

像:

person.find({},{name:1}, function(err, docs) {//used name:1 to return only name
   if(error) {
      return res.status(400).send({msg: "error"});
   }
   return res.status(200).send(docs);
});

答案 1 :(得分:0)

我有一个在参考架构上使用“select:false”的想法。我们仍然需要列出/定义所有相关字段。

例如

{
   "name": "John",
   "age": 25,
   "gender": "male"
}
var Person = mongoose.Schema({ "name": String, "age": Number, "gender": String}, {collection: "People");
var PersonRef = mongoose.Schema({ "name": String, "age": { type: Number, select: false }, "gender": { type: String, select: false },} {collection: "People"});

但是这种方法仅适用于(或有用)模式对于可维护性而言相对较小的情况。如果架构变大,那么我们需要在两个(或多个架构)中设置 select: false 以避免在 RefSchema 中自动选择。

我仍在寻找更好的解决方案来处理这个问题。