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");

在保存文档
时间: 2024-10-09 21:20:52

mongoose 查询子文档的方法的相关文章

mongodb子文档查询

方法一 --子文档分页 db.apRadioLinkQuality.aggregate( {$match: {"logTimeStamp" : {"$gte":1466477620000}}}, {$unwind: "$staDetailList"}, {$sort: {"staDetailList.logTime": -1}}, {$limit: 3}, {"$group": {"_id&quo

C# 更新Mongodb子文档的实现方法

参考资源: 1:mongodb3.2系统性学习--3.update()操作 2: C# 操作mongodb子文档 代码如下: var mongoString = "mongodb://xxxxxxxxxxx:27017"; var host = new TMongodbHostModel { CollectionName = "ft_test", ConnectionString = mongoString, DatabaseName = "system_

mongoose查询数据库步骤

建立dumall数据库,创建goods集合,导入数据文件,也可以自己手动插入. mongodb安装与环境搭建: http://www.cnblogs.com/ccyinghua/p/7887713.html 建立数据库和插入数据,可以是进入mongo操作数据库,以命令行形式插入操作,即成功启动MongoDB后,以管理员身份打开一个命令行窗口输入mongo,就可以进行数据库的一些操作: 也可以下载mongovue3.4.4(64位)客户端进行操作,客户端可以手动输入插入数据,也可以导入文件插入数据

mongodb查询文档

说到查询,我们一般就想起了关系型数据库的查询了,比如:order by(排序).limit(分页).范围查询(大于某个值,小于某个值..,in查询,on查询,like查询等待很多),同样mongodb同样也支持这些操作,只是语法不同,比如排序:mongodb里面使用了skip(field:1/-1)方法,下面就来一一介绍一下: 一.mongodb查询文档 1.查询文档之find() : 不加条件是查询集合全部的数据 语法:db.collectionName.find({条件},{field:tr

CSS3 media媒体查询器的使用方法

最近几年随着响应式布局的发展,一次开发多次使用,自适应屏幕的响应式网站的需求越来越多.但是怎样使得网站能自适应屏幕呢?这里就需要提到一个css3里面新增的技术了-media媒体查询器. 那么什么是media媒体查询器呢? Media媒体查询器是CSS3新增的一个可以检测打开网站的终端的屏幕分辨率的技术. Media媒体查询器的使用方法大致如下: 1.设置一个meta标签如:   1 <meta name="viewport" content="width=device-

mongoose 查询操作的高级应用

对于mongoose操作集合的方便之处确实不一般,但主要还是你在引用中对集合的设计,不过mongoose在使用ref关联集合的时候有限制和查出的集合的组合问题有点麻烦.不过不要紧,简单易用就行. 1.mongoose 中ref关联文档的用法 2.mongoose中populate查询关联文档 3.查询获得数组中单个集合 比如有集合: {     "_id": 11111,     "im": {         "usergroup": [   

mongodb(6):查询文档

find()方法 要从MongoDB集合查询数据,需要使用MongoDB的find()方法. 语法 find()命令的基本语法如下: >db.COLLECTION_NAME.find(document) Shell find()方法将以非结构化的方式显示所有文档. pretty()方法 要以格式化的方式显示结果,可以使用pretty()方法. 语法 > db.mycol.find().pretty() 示例 >db.mycol.find().pretty() { "_id&qu

MongoDB 查询文档随笔

由于之前只是使用 MongoDB 进行存储日志,没有做过分析,只做过通过 api 进行查询操作. 现在有场景需要使用连接工具直接查询分析.所以在此记录一下使用到的查询方法. MongoDB 查询文档使用 find() 方法. find() 方法以非结构化的方式来显示所有文档. 语法 MongoDB 查询数据的语法格式如下: db.collection.find(query, projection) query :可选,使用查询操作符指定查询条件 projection :可选,使用投影操作符指定返

四种生成和解析XML文档的方法详解

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 一.介绍及优缺点分析 1. DOM(Document Object Model) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的. [优点]      ①允许应用