【问题标题】:How to pass a var in an mongodb query in node js如何在节点 js 的 mongodb 查询中传递 var
【发布时间】:2018-02-12 22:55:53
【问题描述】:

我想将变量传递给查询,但我不知道如何:

 db.collection('users').update(
  { "_id":ObjectID(req.params.id)},
  { $set:  { tasks[req.params.pos].done : true }}
  ,(error,resultat)=>{
       if (resultat){
         console.log("mise a jour avec succes ");
         res.send({message:"mise a jour avec succes "});
       } else {
         console.log("Erreur lors du mise a jour ");
         res.send({message:"Erreur lors du mise a jour "});
       }  

     });

这是我想要更改字段的 mongodob 文档,但使用来自变量的索引,例如:var x = 5 "task[x].done = true"

{
"_id" : ObjectId("5a730e55114dbc2a0455c630"),
"email" : "unknown@gmail.com",
"password" : "unknown",
"tasks" : [ 
    {
        "title" : "new 5",
        "description" : "dod ododoododododo",
        "date" : "2018-02-07T18:25:14.881Z",
        "done" : false
    }, 
    {
        "title" : "new2",
        "description" : "dod ododoododododo",
        "date" : "2018-02-07T18:25:14.881Z",
        "done" : false
    }
]
}

【问题讨论】:

  • 当前代码有什么错误?
  • 你可以传json你不能传变量
  • Unexpected token + ///___ 无法在 $set 中进行连接
  • 如何传递 json 而不是 var ?
  • let q = { 'tasks.' + req.params.pos + '.done': true} 然后$set: q

标签: arrays node.js mongodb


【解决方案1】:

Mongo docs 你需要使用位置$ 操作符

    db.collection('users')
    .update({'tasks.title': 'new2'}, 
    {'$set': {'tasks.$.done': false}},
    (error,resultat)=>{...

【讨论】:

  • 还是同样的问题 SyntaxError: Unexpected token +
  • 如果我喜欢这个问题 _____db.collection('users').update( { "_id":ObjectID(req.params.id)}, { $set: { tasks.0 .done : true }}_______ 它工作正常
  • 看答案我上传图片给你
  • 我已经更新了我的答案以使用位置 $ 运算符
  • 这是正确答案,per the docs。请注意,正如此答案所示,您必须将数组字段作为查询的一部分。
【解决方案2】:

这里是解决方案 感谢大家为解决这个问题做出贡献

connection((db)=>{

let tid = { ["tasks."+req.params.pos+".done"] : true };

let query = { "_id": ObjectID(req.params.id) };

db.collection('users').update(
  { "_id":ObjectID(req.params.id)},
  { $set:    tid}
  ,(error,resultat)=>{
       if (resultat){
         console.log("mise a jour avec succes ");
         res.send({message:"mise a jour avec succes "});
       } else {
         console.log("Erreur lors du mise a jour ");
         res.send({message:"Erreur lors du mise a jour "});
       }  

     });
})

【讨论】:

    猜你喜欢
    • 2020-03-10
    • 2013-11-17
    • 2019-08-03
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多