首先,我的代码显然已经简化了。我创建了一个名为“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会这样做。感谢
答案 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}
}
});