zoukankan      html  css  js  c++  java
  • mongoose 查询子文档的方法

     1 {
     2   "__v": 1,
     3   "_id": "538f5f0f6195a184108c8bd8",
     4   "title": "GameTitle",
     5   "item": [{
     6     "_id": "538f5f0f6195a184108c8bd6",
     7     "name": "itemOne",
     8     "men": [{
     9       "_id": "5390cccf0a84f41f37082874",
    10       "user": "id22222222",
    11       "score": 2000
    12     }, {
    13       "_id": "2390cccf0a84f41f37082873",
    14       "user": "id33333333",
    15       "score": 1000
    16     }]
    17   }, {
    18     "_id": "538f5f0f6195a184108c8bd7",
    19     "name": "itemTwo",
    20     "men": []
    21   }],
    22   "status": 1
    23 }
    24  
    25  
    26 //代码是:
    27     var MenSchema = new mongoose.Schema({
    28     user: 'String',
    29     score: {
    30         type: Number,
    31         default: 0
    32         }
    33     });
    34  
    35     var ItemsSchema = new mongoose.Schema({
    36         name: String 
    37         ,men: [MenSchema]
    38     });
    39  
    40     ListsSchema = new mongoose.Schema({
    41         title: {
    42             type: String,
    43             required: true
    44         }
    45         ,item: [ItemsSchema]
    46     });
    47  
    48     var Items = mongoose.model('item', ItemsSchema);
    49     var Lists = mongoose.model('lists', ListsSchema);
    50     var Men = mongoose.model('men', MenSchema);
    51 Insert and update:
    52  
    53 function commit(sId, sItem, sUser, sIncreaseScore) {
    54     Lists.findOne({, "_id": sId,
    55             "item.name": sItem
    56         }, null, function(err, documents) {
    57             if (!err) {
    58                 if (documents != null) {
    59                     Lists.findOne({
    60                         "_id": sId,
    61                         "item.name": sItem,
    62                         "item.men.user": sUser
    63                     }, null, function(err, subDoc) {
    64                         if (!err) {
    65                             if (subDoc != null) {
    66                                 //increase user score
    67                                 //!!!!!!!!!!!!!But subDoc will get all arrays of item.men, so I can't update it correctly
    68                             } else {
    69                                 //inser new user score
    70                                 var userData = new Men({
    71                                     user: sUser,
    72                                     score: sScore
    73                                 });
    74  
    75                                 documents.item[0].men.push(userData);
    76                                 documents.save(function(err) {
    77                                     if (!err) {
    78                                         ///!!!!!!!!!!!!!!Will come this
    79                                         console.log("documents error on save!");
    80                                     } else {
    81                                         console.log("save documents ok!");
    82                                     }
    83                                 });
    84                             }
    85                         }
    86                     });
    87                 }
    88             } else {
    89                 console.log("not find the game item!");
    90             }
    91         }
    92     );
    93 }

    这种查询方法比较特殊,直接用子文档的属性作为查询条件

     "item.men.user": sUser

    也可以这样查找:

    Lists.items.men.id("id");

    此时查到的就是子文档中的某一条,而不是整个父文档,

    执行删除

    Lists.items.men.id("id");

    在保存文档
    坚持下去就能成功
  • 相关阅读:
    目前流行的缺陷管理工具
    高性能WEB开发之Web性能测试工具推荐
    测试工具
    简单的事件示例代码
    C#常用代码片段备忘
    C# 获取变量或对象的栈与堆地址
    C#常用的命名规则汇总
    C# 成员默认访问权限(public、private、protected、internal)
    C# 学习路线
    简单的异常例子
  • 原文地址:https://www.cnblogs.com/suoking/p/5019699.html
Copyright © 2011-2022 走看看