【100分】Mongodb查询结果做差

mooonchen 2016-03-07 04:11:34
mongo中的collection为user,表结构如下:
{
"_id" : ObjectId("123..."),
"create" : "2016-01-01",
"name" : "a"
}
{
"_id" : ObjectId("123..."),
"create" : "2016-01-01",
"name" : "b"
}
{
"_id" : ObjectId("123..."),
"create" : "2016-01-02",
"name" : "c"
}
{
"_id" : ObjectId("123..."),
"create" : "2016-01-03",
"name" : "a"
}
{
"_id" : ObjectId("123..."),
"create" : "2016-01-03",
"name" : "c"
}
{
"_id" : ObjectId("123..."),
"create" : "2016-01-03",
"name" : "d"
}

我想查询"create"为"2016-01-03"的name,但是这个name不能出现在"create"为"2016-01-01"中,
那么查询结果应该是
{
"_id" : ObjectId("123..."),
"create" : "2016-01-03",
"name" : "c"
}
{
"_id" : ObjectId("123..."),
"create" : "2016-01-03",
"name" : "d"
}

请问查询语句怎么写,最好用aggregate而不是find,急求结果,快速结帖给分,谢谢大家。
...全文
192 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 2016-03-08
  • 打赏
  • 举报
回复
mongodb是没有子查询和跨表查询的概念的,感觉没法实现啊 LZ这个感觉应该先把日期是2016-01-01中distinct所有name保存到一个数组中 然后第二次查询的时候可以用$match:{$nin:[ ] } 那个数组排掉那个

db.user.aggregate([{"$match":{"create":"2016-01-03","name":{"$nin":["a","b"]}}}])
小灸舞 2016-03-08
  • 打赏
  • 举报
回复
引用 2 楼 mooonchen 的回复:
[quote=引用 1 楼 qq423399099 的回复:] mongodb是没有子查询和跨表查询的概念的,感觉没法实现啊 LZ这个感觉应该先把日期是2016-01-01中distinct所有name保存到一个数组中 然后第二次查询的时候可以用$match:{$nin:[ ] } 那个数组排掉那个

db.user.aggregate([{"$match":{"create":"2016-01-03","name":{"$nin":["a","b"]}}}])
谢谢您的回复,有人建议我用aggregate,先match in ["2016-01-01","2016-01-03"],然后group by name,然后count > 1的就是出现两次的,然后match过滤掉出现两次的 同时保留 "create":"2016-01-03",就是满足要求的。 可是,我还是写不出来,求帮助。非常感谢。[/quote] 我一开始也是这么想的,我先match["2016-01-01","2016-01-03"]然后用$group和$sum计数大于1的,但是我保留不了create字段 如果在group之前就用project显示的话,那么sum计数所有都是1,如果放在后面的话我就不会了。。。
mooonchen 2016-03-08
  • 打赏
  • 举报
回复
引用 1 楼 qq423399099 的回复:
mongodb是没有子查询和跨表查询的概念的,感觉没法实现啊 LZ这个感觉应该先把日期是2016-01-01中distinct所有name保存到一个数组中 然后第二次查询的时候可以用$match:{$nin:[ ] } 那个数组排掉那个

db.user.aggregate([{"$match":{"create":"2016-01-03","name":{"$nin":["a","b"]}}}])
谢谢您的回复,有人建议我用aggregate,先match in ["2016-01-01","2016-01-03"],然后group by name,然后count > 1的就是出现两次的,然后match过滤掉出现两次的 同时保留 "create":"2016-01-03",就是满足要求的。 可是,我还是写不出来,求帮助。非常感谢。

1,747

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧