mongoose怎么在子文档的array里update或insert? - CNode技术社区

mongoose怎么在子文档的array里update或insert?
发布于 12 年前 作者 gclsoft 12034 次浏览 最后一次编辑是 9 年前
{
 "__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了吧

回到顶部

AltStyle によって変換されたページ (->オリジナル) /