比较mongodb中的两个集合
我有两种不同的JSON藏书和音乐。首先,我给出一个藏书示例:比较mongodb中的两个集合,mongodb,Mongodb,我有两种不同的JSON藏书和音乐。首先,我给出一个藏书示例: { "_id" : ObjectId("b1"), "author" : [ "Mary", ], "title" : "Book1", } { "_id" : ObjectId("b2"), "author" : [ "Joe", "Tony", "Mary" ],
{
"_id" : ObjectId("b1"),
"author" : [
"Mary",
],
"title" : "Book1",
}
{
"_id" : ObjectId("b2"),
"author" : [
"Joe",
"Tony",
"Mary"
],
"title" : "Book2",
}
{
"_id" : ObjectId("b3"),
"author" : [
"Joe",
"Mary"
],
"title" : "Book3",
}
.......
{
"_id" : ObjectId("m1"),
"author" : [
"Tony"
],
"title" : "Music1",
}
{
"_id" : ObjectId("m2"),
"author" : [
"Joe",
"Tony"
],
"title" : "Music2",
}
.......
玛丽写3本书,乔写2本书,托尼写1本书。其次,我举一个音乐收藏的例子:
{
"_id" : ObjectId("b1"),
"author" : [
"Mary",
],
"title" : "Book1",
}
{
"_id" : ObjectId("b2"),
"author" : [
"Joe",
"Tony",
"Mary"
],
"title" : "Book2",
}
{
"_id" : ObjectId("b3"),
"author" : [
"Joe",
"Mary"
],
"title" : "Book3",
}
.......
{
"_id" : ObjectId("m1"),
"author" : [
"Tony"
],
"title" : "Music1",
}
{
"_id" : ObjectId("m2"),
"author" : [
"Joe",
"Tony"
],
"title" : "Music2",
}
.......
托尼有2首曲子,乔有1首曲子,玛丽有0首曲子
我希望能有更多的作家写出比音乐更多的书
因此,玛丽(3>0)和乔(2>1)应该考虑,而不是托尼(1<2)。因此,最终结果应该是2(玛丽和乔)
我写了以下代码,但不知道如何比较:
db.book.aggregate([
{ $project:{ _id:0, author:1}},
{ $unwind:"$author" },
{$group:{_id:"$author", count:{$sum:1}}}
]
)
db.music.aggregate([
{ $project:{ _id:0, author:1}},
{ $unwind:"$author" },
{$group:{_id:"$author", count:{$sum:1}}}
]
)
是这样吗?如何进行以下比较?谢谢。为了解决这个问题,我们需要使用$out-phase并将两个查询的结果存储在中间集合中,然后使用聚合查询将它们连接起来($lookup) 编辑更改: 使用了作者字段而不是_id 在$project阶段的文档中添加了嵌入的逻辑语句 结果:{$gt:[“$count”,“$music.count”] 欢迎有任何问题!
玩得开心!嗨,我按照你的建议做了,遇到了一些问题,请写在你的答案中,谢谢!我只需要知道写更多音乐书籍的作者人数,那么,我是否需要添加{$group:_id:null,number:{$sum:1}}在$match之后?是这样吗?或者你们两个可能一起工作吗?这几乎是一个例子,唯一的区别是将一个收藏命名为“音乐”(出于某种奇怪的原因),而不是像最初那样命名为“纸”。正如最初评论的那样,这实际上只是“循环结果”比较。如果您想要更高性能的数据,请将所有数据放在“一”集合中。