Mongodb + Mongoose:尝试添加子子项

时间:2013-12-02 11:26:46

标签: mongodb mongoose

尝试添加子子项时,这是否有意义? (我是mongo的新手 - 是仁慈的: - ))

question = db.questions.findOne({_id: ObjectId("529c5d44211c9a8c11000006")})
question.answers[0].votes.insert(...)

当我从mongo控制台运行时,结果是一个错误,说[object object]没有方法insert。

我有以下mongoDB问题架构。

{
    "__v" : 2,
    "_creator" : ObjectId("529c5d2d211c9a8c11000005"),
    "_id" : ObjectId("529c5d44211c9a8c11000006"),
    "answers" : [
    {
        "postDate" : ISODate("2013-12-02T10:14:19.060Z"),
        "postDateText" : "15min ago",
        "authorEmail" : "guys@pix.com",
        "authorName" : "guys@pix.com",
        "body" : "You need magic powder",
        "isWinner" : false,
        "_creator" : ObjectId("529c5d2d211c9a8c11000005"),
        "_id" : ObjectId("529c5d7b211c9a8c11000008"),
        "votes" : [
            {
                "voteType" : "up",
                "_creator" : ObjectId("529c5d2d211c9a8c11000005"),
                "_id" : ObjectId("529c5d5b211c9a8c11000007")
            }
        ]
    }
],
    "authorEmail" : "guys@wix.com",
    "authorName" : "guys@wix.com",
    "body" : "I'm trying to fly...\n\n<pre class=\"brush: js;\">\nfunction logName(name) {\n    console.log(name);\n}\n</pre>",
    "isResolved" : false,
    "postDate" : ISODate("2013-12-02T10:13:24.235Z"),
    "tags" : [
    "fly"
],
    "title" : "How do I fly?",
    "views" : [],
    "votes" : [
    {
        "voteType" : "up",
        "_creator" : ObjectId("529c5d2d211c9a8c11000005"),
        "_id" : ObjectId("529c5d5b211c9a8c11000007")
    }
]
}

我正在尝试,给出一个问题和一个answerId来为投票数组添加投票(在答案内)。我似乎无法做到这一点。帮助

1 个答案:

答案 0 :(得分:2)

insert用于添加全新文档;当您只想将新元素添加到现有文档的数组字段时,可以使用update以及$push之类的运算符。

所以,在shell中你会使用这样的东西:

db.questions.update(
    {_id: ObjectId("529c5d44211c9a8c11000006")},
    {'answers.0.votes': {$push: voteToPush}})