MongoDB Monk $推送到数组中对象的数组

时间:2017-02-01 18:13:59

标签: node.js mongodb

大家好:我正在尝试将字符串推送到数组中对象的数组中。我一直在摆弄我的NodeJS代码几个小时,但无法解决这个问题。以下是我正在使用的数据示例。

{
    "_id" : ObjectId("5890c87051e301f17d9ba814"),
    "comments" : [
            {
                    "5890db366a29d63612e1f8f5" : {
                            "eventName" : "111",
                            "startDateTime" : ISODate("2017-01-31T18:50:00Z")
                    }
            }
    ]

}

我想推送一个名为" array"的数组。这将出现在startDateTime下。

我目前正在尝试这样的事情:

$push: { ['comments.' + ObjectID(rateReviewObject.eventID) + '.array'] : rateReviewObject.comment }
  

MongoError:不能使用该部分(comments.5890db366a29d63612e1f8f5.array的评论)来遍历该元素({comments:[{5890db366a29d63612e1f8f5:{eventName:" 111",startDateTime:new Date(1485888600000)} }]})

任何人都可以帮助我吗?

修改 完整查询:

// add the optional review (comment) to the instructor's list of comments in the DB
        commentCollection.update(
          { _id : ObjectID(rateReviewObject.instructorID) },
          {
            $addToSet:
            { 
              comments: 
              {
                eventID: ObjectID(rateReviewObject.eventID),
                eventName: rateReviewObject.eventName,
                startDateTime: new Date(rateReviewObject.startDateTime)
              }
            },
            $push: { ['comments.' + ObjectID(rateReviewObject.eventID) + '.array'] : rateReviewObject.comment }
          },
          { upsert: true }, // create a new document for the instructor if this is their first review

1 个答案:

答案 0 :(得分:2)

您可以使用位置$运算符,它返回数组中第一个匹配项的索引以及$ exists运算符,该运算符检查文档中是否存在密钥。 你的情况会:

/Users/srm> int c = 1
/Users/srm> c++
/Users/srm> c
/Users/srm> 2
/Users/srm> int c = 3
ERROR: identifier 'c' redeclared
ERROR: invalid lvalue of assignment operation

了解更多 https://docs.mongodb.com/manual/reference/operator/update/positional/