比较mongodb中的两个集合

比较mongodb中的两个集合,mongodb,Mongodb,我有两种不同的JSON藏书和音乐。首先,我给出一个藏书示例: { "_id" : ObjectId("b1"), "author" : [ "Mary", ], "title" : "Book1", } { "_id" : ObjectId("b2"), "author" : [ "Joe", "Tony", "Mary" ],

我有两种不同的JSON藏书和音乐。首先,我给出一个藏书示例:

{
    "_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之后?是这样吗?或者你们两个可能一起工作吗?这几乎是一个例子,唯一的区别是将一个收藏命名为“音乐”(出于某种奇怪的原因),而不是像最初那样命名为“纸”。正如最初评论的那样,这实际上只是“循环结果”比较。如果您想要更高性能的数据,请将所有数据放在“一”集合中。