如何使用Node.js 操作mongoDB 来更新某个Object的某个数组字段里面的某一项?

RT。有点绕。还是举个例子吧。 post对象有以下属性:
{
"id":"111",
"content":"some text",
"comments":[{"id":"111","content":"some text","state":0},
{"id":"222","content":"some text","state":0}]
}

现在我知道post的id,以及comments某一项的id,比如222,要把id=222的state改为1.

Node.js 操作mangoDB 语句怎么写?

收藏 0 分享浏览 1952
4年前
跟帖
全职幽默
4年前

自己解决了。又自问自答了。方法如下:

db.collection.update({"_id":ObjectID(post_id),comments:{$elemMatch: { id: comment_id }}},{$set:{"comments.$.state":state}},{w:0},callback(null));
沙发

楼主,我的用例跟你的差不多,但是我用update总是插不进去 这是我的代码: collection.update({
"name": name,
"time.day": day,
"title": title
}, {
     $push: {"comments": comment}
} , function (err) {
     mongodb.close();
     if (err) {
          return callback(err);
}
     callback(null);
});
我使用这段代码,debug显示的是插入成功,但是到数据库查看那个comment字段里对象数组什么都没有,这是怎么回事呢,求解答

板凳
全职幽默
4年前

你是push啊,用findAndModify方法

collection.findAndModify({"_id":ObjectID(pid)}
            , [['time',-1]]
            , {$push:{"comments":comment},$inc:{"comment":1}}
            , {new: true}
            , function (err,comment) {
                pool.release(db);
                callback(null);
            });

上面代码是可行的插入写法 供参考

4 楼
说几句
广告位 点击查看投放指南

我的收藏