{
"_id" : ObjectId("59e05fa63e0f5015dcaeadbe"),
"name" : "santu",
"mes" : "测试留言1",
"time" : ISODate("2017-10-13T06:39:34.273Z"),
"replay" : [
{
"time" : ISODate("2017-10-13T06:39:55.365Z"),
"_id" : ObjectId("59e05fbb3e0f5015dcaeadbf"),
"replayer" : "santu",
"replaymes" : "测试留言回复1"
}
],
"__v" : 0
}
数据结构是这样的,想要获取'replay',下的内嵌文档个数或者所有的内容
db.mesModel.aggregate([
{$project: {num: {$size: '$replay'}}}
])
这样的查询语打印的结果是
[ { _id: 59e05fa63e0f5015dcaeadbe, replay: 1 },
{ _id: 59e063d85f465906606add9a, replay: 1 },
{ _id: 59e063da5f465906606add9b, replay: 1 },
{ _id: 59e063dd5f465906606add9c, replay: 1 } ]
就打印出了我所有每个父级数据的子数据个数
中文文档不是很齐。。。英文的看着有点压力
具体实现目标获取上列数据中的所有"replaymes"
我在想是否有一个api能直接获取
我自己的实现方式是 找到内嵌数据数量,遍历
db.mesModel.findOne({mes:'xxx'},(err,doc)=>{
var len = doc.replay.length
for(let i=0;i<len;i++){
console.log(doc.replay[i].replaymes)//打印出来了
}
})
内嵌的文档的精确多条件查询,实现目标是已知replay下的 replaymes和time 查找符合条件的 replay
db.mesModel.aggregate(
{"$project":{"replay":"$replay"}},
{"$unwind":"$replay"},
{"$match":{"replay.replaymes":'xxx','replay.time':'xxx'}}
,function(err,doc){
console.log(doc)
})
如果用time做条件会匹配不到 但是如果用replay.replayer 做条件 能匹配到