node.js - 插入 Mongoose 后找不到文档

标签 node.js mongodb mongoose

我正在处理一个具体且简单的案例。我需要一些帮助,因为我似乎无法找到解决方案。

我在 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() 从集合中检索所有内容,它就会显示出来。

然后,我尝试使用以下内容查找插入的文档:

FindCalendarViewUser : function(Id){
    this.CalendarViewUser.findOne(
                { OwnerID : Id }, 
                function(err,result){

            if(err) {console.log(err);}
            else{console.log(result);}  
        }
        );
}

这里,它返回 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 存在某种不兼容。我将发布结果。

最佳答案

事实证明,FindCalendarViewUser 函数的回调函数本身需要括号...它现在可以工作,只需添加这些括号...

FindCalendarViewUser : function(Id){
    this.CalendarViewUser.findOne(
        { OwnerID : Id }, 
        (function(err,result){

            if(err) {console.log(err);}
            else{console.log(result);}  
        })
    );
}

这是工作示例。天哪,为什么。我可以发誓我在其他场合没有使用过它。

编辑:现在它可以在没有括号的情况下工作。对不起。这一定是我在代码方面遇到的一些小问题。我就是找不到。

关于node.js - 插入 Mongoose 后找不到文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10555597/

相关文章:

javascript - Mongoose/MongoDB 查询 .find() 任何 int > 0?

node.js - Heroku Review 应用程序配置和日志记录(与生产配置/日志记录相比)

javascript - Rhino 是唯一支持沙盒和可序列化延续的解释器吗?

node.js - Sequelize() 不返回 sequelize 的实例

node.js - MongoDB 按字段返回所有文档而不重复?

node.js - 如何在mongodb上动态创建子文档

node.js - 如果不调用removeAllListeners(),EventEmitter会导致内存泄漏吗?

javascript - NodeJS 第一个 res.body 对象在引号中

python - MongoDB 聚合 - $lookup + $unwind 之后的 $group

node.js - mongoose 7.0.3 使用运算符 $and 严格搜索日期