Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js MongoDB更新对象值的嵌套对象_Node.js_Mongodb - Fatal编程技术网

Node.js MongoDB更新对象值的嵌套对象

Node.js MongoDB更新对象值的嵌套对象,node.js,mongodb,Node.js,Mongodb,我有以下格式: { "_id" : ObjectId("5af44cfbe2e96c58ec402efb"), "username" : "egealpay2", "email" : "egealpay2@gmail.com", "fullName" : "ege", "pnumber" : "", "oneSignal" : "d427dcdf-7939-4ada-a035-be74e1e45091

我有以下格式:

{
        "_id" : ObjectId("5af44cfbe2e96c58ec402efb"),
        "username" : "egealpay2",
        "email" : "egealpay2@gmail.com",
        "fullName" : "ege",
        "pnumber" : "",
        "oneSignal" : "d427dcdf-7939-4ada-a035-be74e1e45091",
        "friends" : [
                {
                        "email" : "baransrc@gmail.com",
                        "status" : 2
                }
        ],
        "alarms" : [
                {
                        "id" : "2",
                        "title" : "before",
                        "location" : "default",
                        "startTime" : "2018-05-16\t\t\t16:29",
                        "endTime" : "16:29\t\t\t17 - 05 - 2018",
                        "remindAt" : "17:29\t\t\t15 - 05 - 2018",
                        "privacy" : "0",
                        "userORJoinedAlarm" : "1",
                        "eventJoiners" : [
                                {
                                        "email" : "ilkersadya@sabanciuniv.edu",
                                        "status" : 1
                                },
                                {
                                        "email" : "ilkercankayasss@sabanciuniv.edu",
                                        "status" : 1
                                },
                                {
                                        "email" : "ilkearcankaya@sabanciuniv.edu",
                                        "status" : 1
                                },
                                {
                                        "email" : "iaaalkercankaya@sabanciuniv.edu",
                                        "status" : 1
                                }
                        ],
                        "comments" : [ ]
                }
        ]
}
我想设置
电子邮件的
状态:2
:ilkersadya@sabanciuniv.edu,它位于
“报警:”、“eventJoiners”下:
,其id为2作为
“id”`

我试过用$push,但没法让它工作,它已经困扰了我两个多小时了

感谢@Ashish:

 dbo.collection("users").findOne( { email: userId } , function(errZer, addedZer) {
          dbo.collection("users").findOneAndUpdate( {email: addedID, "alarms.id": eventIDGiv,  alarms: { $elemMatch: { id: '2', eventJoiners: { $elemMatch: { email: addedID } } }} },
          { $set: { "alarms.$.eventJoiners.$.status": '2' } , function(err, added) {
找到错误了吗

(node:9334) UnhandledPromiseRejectionWarning: MongoError: Too many positional (i.e. '$') elements found in path 'alarms.$.eventJoiners.$.status'
位置运算符(
$
)只能用于一级嵌套数组。在您的情况下,您必须为
报警
事件加入器
指定条件。为此,您可以使用语法(MongoDB 3.6+中提供):


在这种情况下,标识符
elem1
elem2
用作
arrayFilters
部分中指定条件的占位符。

im get:MongoError:无法使用部分(报警的报警。$[elem1].eventJoiners.$[elem2].status)遍历元素({alarms:[{id:“3”,标题:“请注意,我正在使用node.js制作call@CompuScie您有哪个MongoDB版本?MongoDB shell版本:3.2。19@CompuScie你能升级吗?我这么问是因为就我而言,在3.6以下的版本中,你不能更新多个级别的嵌套数组
db.collection.update(
    { _id: ObjectId("5af44cfbe2e96c58ec402efb") },
    { $set: { "alarms.$[elem1].eventJoiners.$[elem2].status": "2" } },
    { arrayFilters: [ { "elem1.id": "2" }, { "elem2.email": "ilkersadya@sabanciuniv.edu" } ]})