我正在处理一个具体而简单的案例。我需要一些帮助,因为我似乎无法找到解决方案。
我在 javascript 类中为 MongoDB 创建了一个简单的模式和模型。
this.UserSchema = new this.Schema({
UserId: { type: String },
IsToggle: { type: Boolean}
});
this.CalendarViewUserSchema = new this.Schema({
_id: { type: this.Schema.ObjectId },
OwnerId: { type: String },
UserList: [ this.UserSchema ]
});
this.CalendarViewUser = this.mongoose.model('CalendarViewUsers',this.CalendarViewUserSchema);
这是在构造函数中,我已经有很多数据库交互在工作,但我无法让这个工作正常。
我将此方法称为添加新文档:
AddCalendarViewUser : function(Id, UserToAddId){
NewUser = { UserId : UserToAddId, IsToggle : false };
this.CalendarViewUser.update(
{ OwnerId : Id },
{
$set: { OwnerId : Id },
$push: { UserList : NewUser }
},
{upsert:true},
function(err){
if(err) {console.log(err);}
else {console.log('Success');}
}
);
}, // this comma just introduces the next method.
这工作正常。我可以看到使用 Mongo Explorer 正确创建了文档,如果我使用 .find() 从集合中检索所有内容,它就会显示出来。
然后,我尝试使用以下方法查找插入的 Doc:
FindCalendarViewUser : function(Id){
this.CalendarViewUser.findOne(
{ OwnerID : Id },
function(err,result){
if(err) {console.log(err);}
else{console.log(result);}
}
);
}
在这里,它返回结果 = null。
“Id”参数在这两种方法中都是一个字符串,就像 Schema 中的“OwnerId”一样。
我究竟做错了什么?
“OwnerId”和“Id”都是相同的。我也尝试将两者都转换为 ObjectId,但没有成功。
对不起,代码格式。
编辑:
基本上,我可以使用 _id 字段找到文档:
{ _id : '4fb0d1702edfda0104fc2b9f'}
但是我在 OwnerId 字段中找不到它:
{ OwnerId : '4f55e1a6c2c7287814000001'}
这些值直接取自数据库,因此它们对应于实际存储的值。
编辑2:
我刚刚发现如果我手动插入值:
$set: { OwnerId : '4f55e1a6c2c7287814000001' }
然后通过完全相同的字符串搜索,它会返回文档!
this.CalendarViewUser.findOne(
{ OwnerID : '4f55e1a6c2c7287814000001'}
...
所以我猜它是在文档的 OwnerID 字段中插入了某种垃圾,或者与该字段的 Type 存在某种不兼容。我会发布结果。