大家好:我正在尝试将字符串推送到数组中对象的数组中。我一直在摆弄我的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
答案 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/