mongoose怎么在子文档的array里update或insert?
发布于 10 年前 作者 gclsoft 11442 次浏览 最后一次编辑是 8 年前
{
  "__v": 1,
  "_id": "538f5f0f6195a184108c8bd8",
  "title": "GameTitle",
  "item": [{
    "_id": "538f5f0f6195a184108c8bd6",
    "name": "itemOne",
    "men": [{
      "_id": "5390cccf0a84f41f37082874",
      "user": "id22222222",
      "score": 2000
    }, {
      "_id": "2390cccf0a84f41f37082873",
      "user": "id33333333",
      "score": 1000
    }]
  }, {
    "_id": "538f5f0f6195a184108c8bd7",
    "name": "itemTwo",
    "men": []
  }],
  "status": 1
}
\n```

```js\n
    var MenSchema = new mongoose.Schema({
    user: 'String',
    score: {
        type: Number,
        default: 0
        }
    });

    var ItemsSchema = new mongoose.Schema({
        name: String 
        ,men: [MenSchema]
    });

    ListsSchema = new mongoose.Schema({
        title: {
            type: String,
            required: true
        }
        ,item: [ItemsSchema]
    });

    var Items = mongoose.model('item', ItemsSchema);
    var Lists = mongoose.model('lists', ListsSchema);
    var Men = mongoose.model('men', MenSchema);
Insert and update:

function commit(sId, sItem, sUser, sIncreaseScore) {
    Lists.findOne({, "_id": sId,
            "item.name": sItem
        }, null, function(err, documents) {
            if (!err) {
                if (documents != null) {
                    Lists.findOne({
                        "_id": sId,
                        "item.name": sItem,
                        "item.men.user": sUser
                    }, null, function(err, subDoc) {
                        if (!err) {
                            if (subDoc != null) {
                                //increase user score
                                //!!!!!!!!!!!!!But subDoc will get all arrays of item.men, so I can't update it correctly
                            } else {
                                //inser new user score
                                var userData = new Men({
                                    user: sUser,
                                    score: sScore
                                });

                                documents.item[0].men.push(userData);
                                documents.save(function(err) {
                                    if (!err) {
                                        ///!!!!!!!!!!!!!!Will come this
                                        console.log("documents error on save!");
                                    } else {
                                        console.log("save documents ok!");
                                    }
                                });
                            }
                        }
                    });
                }
            } else {
                console.log("not find the game item!");
            }
        }
    );
}
\n```
这是一个类似iOS game center分数排行榜的数据库, 一个游戏里有多个item项目, 每个项目有多个玩家的分数数据.
document里包含了subDoc子文档,子文档里又有一个array,怎么找到这个array里的某个值,并对它进行修改?
2 回复

先看一楼给的mongodb的文档,最关键的还是你怎么查到你要的数据,再去修改 最主要的是如何去查到你要修改的数据,用$elemMatch,$gt,$lt等等,查到了再说修改就easy了吧

回到顶部