为什么MongoDB返回空数组;

时间:2018-01-18 18:17:43

标签: mongodb

首先,我的代码显然已经简化了。我创建了一个名为“followers”的新字段,以便将关注者名称存储为数组类型。

USER SCHEMA

 var userSchema = new mongoose.Schema({
    local:{
        localId:{type:Number},
        username:{type:String},
        email:{type:String},          
        followers:{type:Array}       
    },
    facebook:{
        facebookId: {type:Number},     
        username:{type:String},
        email:{type:String},       
        followers:{type:Array}       
    },
    twitter:{
        twitterId: {type:Number},
        username:{type:String},
        email:{type:String},      
        followers:{type:Array} 
    }
});

数据库记录

{ "_id" : ObjectId("...."), "facebook" : { "facebookId" : 10215321125408144, "username" : "johnny", "email" : "johnny@hotmail.com}, "__v" : 0 }

但是出现了一些奇怪的东西。当我查询时:

User.findOne({$or: [
              {'local.username': 'johnny' },
           { 'facebook.username': 'johnny'  },
            { 'twitter.username': 'johnny'  },
  ]}, function(err, user) {
            if(err){console.log(err);} 
              if(!user){
                console.log('cannot find user');
              }
              if(user){
                console.log('usrInfo is : '+user);
              return res.send(JSON.stringify(user));
            }
        });

我得到了结果:

usrInfo is : { _id: 5a60de744b85e14051e03e2e,
  __v: 0,
  twitter: { followers: [] },
  facebook: 
   { facebookId: .....,
     username: 'johnny',
     email: 'johnny@hotmail.com',
    .............,
     followers: [] },
  local: { followers: [] } }

我无法理解为什么

 twitter: { followers: [] } and   local: { followers: [] }

正在出现。有没有办法避免这种情况;因为我是MongoDB的新手,所以我很感激为什么MongoDB会这样做。感谢

1 个答案:

答案 0 :(得分:1)

出现此问题的原因是,根据Mongoose documentation,模式中Array 隐式的字段的默认值为[]。尝试将默认值设置为undefined,看看是否能解决您的问题:

var userSchema = new mongoose.Schema({
    local:{
        localId:{type:Number},
        username:{type:String},
        email:{type:String},
        followers:{type:Array, default: undefined}
    },
    facebook:{
        facebookId: {type:Number},
        username:{type:String},
        email:{type:String},
        followers:{type:Array, default: undefined}
    },
    twitter:{
        twitterId: {type:Number},
        username:{type:String},
        email:{type:String},
        followers:{type:Array, default: undefined}
    }
});