从mongoose查询中获取特定格式的对象数据数组

时间:2017-05-10 11:34:24

标签: javascript json mongodb express mongoose

使用Mongoose和express,同时检索朋友列表,

我以一种我需要简化的格式获取我不需要的数据

  1. 如何在朋友子文档中隐藏_id和状态?

  2. 我想要一个对象数组来填充每个对象的id字段,而不是其他所有对象,包括架构中的_id和status。

  3. 例如。

    var friends = [{firstName: "User 1", lastName: "User 1", username: "user1"}, {firstName: "User 2", lastName: "User 2", username: "user2"}]
    

    目前看起来像这样

    
    
    var UserSchema = new Schema({
      friends: [
        { 
          id: 
            { 
              type: Schema.Types.ObjectId, ref: 'User'}, 
              status: Number 
            }
        }
      ]
    });
    
    app.get('/getFriends', requireLogin, function(req, res) {
      User.findOne({ _id: req.user.id }, 'friends')
    	.populate({
    	  path: 'friends.id',
    		model: 'User',
    		select: 'username firstName lastName -_id'
    	})
    	.exec(function(err, friends) {
    	  res.json(friends);
    	}) 
    })
    
    friends: [ 
      { 
        id: [Object], 
        status: 2, 
        _id: 590bbb88858367c9bb07776e 
      },
      { 
        id: [Object], 
        status: 2, 
        _id: 590bbb95858367c9bb07776f 
       }
    ]
    
    id Object
    firstName: "User 1", lastName: "User 1", username: "user1"
    
    
    

1 个答案:

答案 0 :(得分:0)

使用select函数仅选择所需的属性

.select('firstName lastName username').exec(function(err, friends) {
      res.json(friends);
}) 

或使用mapdelete的组合删除键/值对

var friends = [{
    id: 1,
    status: 2,
    _id: 590 
  },
  {
    id: 2,
    status: 2,
    _id: 590 
  }
];

friends = friends.map(function(v) {
 delete(v._id);
 return v;
});

console.log(friends);