Express Mongoose不是$setting array。$.booleanValue,当我找到doneAndupDate({paramOne:p,paramtow2,array.keyName:valueName})时

Express Mongoose不是$setting array。$.booleanValue,当我找到doneAndupDate({paramOne:p,paramtow2,array.keyName:valueName})时,express,mongoose,postman,Express,Mongoose,Postman,我试图通过 app.post("/api/post/:chorecomplete", function(req, res){ Parent.findOneAndUpdate({parentFirstName: req.body.parentFirstName, parentLastName: req.body.parentLastName, "chores.choreName": "firstChore"}, {$set: {"chores.$.complete": "

我试图通过

 app.post("/api/post/:chorecomplete", function(req, res){
            Parent.findOneAndUpdate({parentFirstName: req.body.parentFirstName, parentLastName: req.body.parentLastName, "chores.choreName": "firstChore"}, {$set: {"chores.$.complete": "true"}}).exec(function(err, doc){
                if (err){ console.log(err); res.send("not ok");}
                    else{
                        console.log(doc);`enter code here`
                        res.send(ok);
                    }
            })
        })

    }
我的服务器记录mongoose响应,但不是因为我也在告诉它。我对console.log(doc)进行了注释,它对它进行了测试,以查看我的数据库是否返回了它,或者我的服务器是否记录了它。问题是,我的服务器响应为“Ok”,这意味着mongoose没有抛出错误,但它没有修改我的

POST/api/POST/200 17.378毫秒-2
[1] {id:597aa48313cf6914905916e0,
[1] parentFirstName:“firstName”,
[1] parentLastName:“lastName”,
[1] 家长电邮:'mich@ael.com',
[1] __v:0,
[1] 儿童:[],
[1] 家务:
[1] [{choreName:'firstChore',
[1] ChoreDescription:“firstDescription”,
[1] 值:null,
[1] 完成:false},
[1] {choreName:'secondChore',
[1] choreDesc:“第二个描述”,
[1] choreValue:null,
[1] 完成:false}]}

我不知道我做错了什么。这里有一个静态查询参数,但“firstChore”最终将是req.body.choreName。我开始怀疑我是否应该为琐事创建一个集合,并将其引用到我的父模式和子模式,但我不能100%确定如何实现对父模式和子模式的引用,这将相互引用。。。(父项和子项都有单独的用户帐户,子项将更新要完成的杂务,并将收到杂务值[在本例中应为$5.00,但出于某些原因,mongoose不接受它。除表单值外,当前未在任何位置定义它。]。这是一个示例模式。(我正在尽可能详细地回答。时间不早了,这是我在这里的第一个问题。)

```//父模式 var mongoose=要求(“mongoose”); var Schema=mongoose.Schema

var ParentSchema=新模式({ 父名:{ 类型:字符串, 必填项:true },

}))

var Parent=mongoose.model(“Parent”,ParentSchema)

module.exports=父级

``` 这是向数组添加杂务的路径。它将是形式值。与显式定义为自己的模型不同,琐事是在该路径中动态有效地定义的。

//插入杂务的路径
app.post(“/api/post/:chores”),函数(req,res){
//当有人登录时,我们将从他们的状态中获取一个值(id或电子邮件),并替换我的名字。这只是我的名字b/c,这是我最初插入数据库的名字。
//如果chores==chores,那么findAll else如果{var thechorestofind===req.params.chores},我们将运行该chores来更新一个chores?
var parentFirstName=req.body.parentFirstName;
var parentLastName=req.body.parentLastName;
var choreName=req.body.choreName;
var choreDesc=req.body.choreDesc;
var choreValue=req.body.choreValue;
Parent.findOneAndUpdate({parentFirstName:req.body.parentFirstName,parentLastName:req.body.parentLastName},{$push:{choreName:choreName,choreDesc:choreDesc,choreValue:choreValue,complete:false}}})。exec(函数(err,doc){
if(err){console.log(err)}
控制台日志(doc);
})
res.send(“Ok”);
})//结束新的家务

这是令人难以置信的长篇大论。我只是不想让我提出来的任何东西不在这里作为参考。如果你能做到这一点。谢谢。

可能的问题 这看起来可能是您的Express routes而不是MongoDB的问题

代码的其余部分看起来有效,但您有一个名为
/api/post/:chores的
post
路由和另一个路由名
/api/post/:chorescomplete

尽管参数名称不同,但Express实际上会将这些路由解释为相同的,因为冒号使参数成为通配符,可以是传递给它的任何值

在Express中,属性附加到
app
的顺序非常重要

在这种情况下,假设您没有任何其他与
/api/post/:parameter
模式匹配的
post
路由,如果
/api/post/:choreos
是在
/api/post/:chorecomplete
之前编写的,那么对
/api/post/:chorecomplete
的任何post请求都将实际匹配
/api/post/:chores
,并运行该路由中的代码

这可能是您得到
OK
响应且控制台不可用的原因 记录数据库中的文档,因为您实际上正在发布到
/api/post/:chores
,并运行一个成功的查询

解决方案 有几种方法可以解决这个问题,所有这些方法都围绕着改变路线的路径。这完全取决于您的命名模式以及您计划如何访问数据

由于所讨论的代码正在更新现有文档,您可以将其改为
put
路由

app.put(“/api/post/:chorecomplete”),函数(req,res){…}
或者,您可以将其保留为
post
,并将另一个名称附加到路径中,使其不再与代码中的另一条路径匹配:

app.post(“/api/post/chorecomplete/:parameter”,函数(req,res){…}
可能的问题 这看起来可能是您的Express routes而不是MongoDB的问题

代码的其余部分看起来有效,但您有一个名为
/api/post/:chores的
post
路由和另一个路由名
/api/post/:chorescomplete

尽管参数名称不同,但Express实际上会将这些路由解释为相同的,因为冒号使参数成为通配符,可以是传递给它的任何值

在Express中,属性附加到
app
的顺序非常重要

在这种情况下,假设你不
parentLastName: {
    type: String,
    required: true
},

parentEmail: {
    type: String,
    required: true,
    validate: [
    function(input){
        input.length >= 3;
    },
    "Email must be a valid email"
    ]
},

password: {
type: String,
//required: true,
validate: [
    function(input){
        input.length >= 6;
    },
    "Password must be at least 6 characters"
    ]
},

chores: { 
    type: Array,
},

children: [{
    type: Schema.Types.ObjectId,
    ref: "Child"
}]