Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在集合中设置输入数组和数组列之间的交集_Arrays_Mongodb_Pymongo - Fatal编程技术网

Arrays 在集合中设置输入数组和数组列之间的交集

Arrays 在集合中设置输入数组和数组列之间的交集,arrays,mongodb,pymongo,Arrays,Mongodb,Pymongo,我有一个用户将输入的数组,我想对照集合中的每个文档进行检查。每个文档都有一个名为“members”的列,该列有自己的数组。我想让mongo循环遍历每一列并进行setIntersection以查看这两个数组的相似性,然后将结果返回给我,这样我就可以向用户显示哪些文档最接近它们的输入。到目前为止,在平蒙戈,我在遇到路障之前已经完成了这个命令 list(collection.aggregate([{"$project":{"members":1,'id':1}}, {"$match":{"member

我有一个用户将输入的数组,我想对照集合中的每个文档进行检查。每个文档都有一个名为“members”的列,该列有自己的数组。我想让mongo循环遍历每一列并进行setIntersection以查看这两个数组的相似性,然后将结果返回给我,这样我就可以向用户显示哪些文档最接近它们的输入。到目前为止,在平蒙戈,我在遇到路障之前已经完成了这个命令

list(collection.aggregate([{"$project":{"members":1,'id':1}},
{"$match":{"members":["FOXF1","GATA6","SOX9","TWIST1","ZEB1","ZEB2"]}}]))
此命令遍历每个文档的“成员”列,并将与查询完全匹配的id和成员返回给我:

"members":["FOXF1","GATA6","SOX9","TWIST1","ZEB1","ZEB2"]
我想更进一步,但我不确定如何开始处理不仅是执行setIntersection,而且同时在每个文档上执行它

文档显示了一个比较2个阵列的简单示例

commonToBoth: { db.experiments.aggregate([
{ $project: { A: 1, B: 1, commonToBoth: { $setIntersection: [ "$A", "$B" ] }, _id: 0 } }])
我希望第二个数组在每个文档的“成员”列中循环。所以我可以一次完成所有文档的setIntersection,我不确定从哪里开始

还有一件事我不确定pymongo的setIntersection语法。例如,mongo使用findOne,而pymongo使用
find\u one
。我发现setIntersection的情况并非如此。
$set\u intersection
$setIntersection
都不起作用,而且我还没有在pymongo在线找到任何关于如何设置交叉点的文档。感谢您的阅读和帮助。

请尝试以下内容:

inputArray = ["FOXF1", "GATA6", "SOX9", "TWIST1", "ZEB1", "ZEB2"]

list(collection.aggregate([{ "$match": { "members": { $in: inputArray } } },
{
    $project: {
        matchingCount: { $size: { $setIntersection: ['$members', inputArray] } }
        , matchingMembers: { $setIntersection: ['$members', inputArray] }
    }
}, { $sort: { 'matchingCount': -1 } }]))
如果您有一个
id
字段,那么您可以在
$project
中执行
id:1
\u id:0
。由于您有一个
$match
,此输出将只包含从inputArray到members数组中至少有一个匹配元素的文档,如果要检查集合中所有文档的匹配率,只需删除该筛选器,但最好将match作为第一阶段,因为通过减少后期阶段的文档总数,DB操作得到了极大的优化

示例文档:

/* 1 */
{
    "_id" : ObjectId("5dd859f93d319574a17e9be9"),
    "members" : [ 
        "FOXF1", 
        "GATA6", 
        "SOX9", 
        "TWIST1", 
        "ZEB1", 
        "ZEB2"
    ]
}

/* 2 */
{
    "_id" : ObjectId("5dd85a053d319574a17e9e0c"),
    "members" : [ 
        "FOXF11", 
        "GATA61", 
        "SOX91", 
        "TWIST11", 
        "ZEB11", 
        "ZEB21"
    ]
}

/* 3 */
{
    "_id" : ObjectId("5dd85a0f3d319574a17ea02a"),
    "members" : [ 
        "FOXF1"
    ]
}

/* 4 */
{
    "_id" : ObjectId("5dd85a1a3d319574a17ea29d"),
    "members" : [ 
        "FOXF1", 
        "ZEB2"
    ]
}

/* 5 */
{
    "_id" : ObjectId("5dd85a263d319574a17ea4fa"),
    "members" : [ 
        "FOXF1", 
        "GATA61", 
        "SOX91", 
        "TWIST11", 
        "ZEB1", 
        "ZEB2"
    ]
}

/* 6 */
{
    "_id" : ObjectId("5dd85a343d319574a17ea79c"),
    "members" : [ 
        "FOXF1", 
        "GATA6", 
        "SOX9"
    ]
}

/* 7 */
{
    "_id" : ObjectId("5dd85a433d319574a17eaa4b"),
    "members" : [ 
        "FOXF1", 
        "GATA6", 
        "SOX9", 
        "TWIST1"
    ]
}

/* 8 */
{
    "_id" : ObjectId("5dd85a4d3d319574a17eab7a"),
    "members" : []
}

/* 9 */
{
    "_id" : ObjectId("5dd85a573d319574a17eac89"),
    "members1" : ""
}
/* 1 */
{
    "_id" : ObjectId("5dd859f93d319574a17e9be9"),
    "matchingCount" : 6,
    "matchingMembers" : [ 
        "FOXF1", 
        "GATA6", 
        "SOX9", 
        "TWIST1", 
        "ZEB1", 
        "ZEB2"
    ]
}

/* 2 */
{
    "_id" : ObjectId("5dd85a433d319574a17eaa4b"),
    "matchingCount" : 4,
    "matchingMembers" : [ 
        "FOXF1", 
        "GATA6", 
        "SOX9", 
        "TWIST1"
    ]
}

/* 3 */
{
    "_id" : ObjectId("5dd85a263d319574a17ea4fa"),
    "matchingCount" : 3,
    "matchingMembers" : [ 
        "FOXF1", 
        "ZEB1", 
        "ZEB2"
    ]
}

/* 4 */
{
    "_id" : ObjectId("5dd85a343d319574a17ea79c"),
    "matchingCount" : 3,
    "matchingMembers" : [ 
        "FOXF1", 
        "GATA6", 
        "SOX9"
    ]
}

/* 5 */
{
    "_id" : ObjectId("5dd85a1a3d319574a17ea29d"),
    "matchingCount" : 2,
    "matchingMembers" : [ 
        "FOXF1", 
        "ZEB2"
    ]
}

/* 6 */
{
    "_id" : ObjectId("5dd85a0f3d319574a17ea02a"),
    "matchingCount" : 1,
    "matchingMembers" : [ 
        "FOXF1"
    ]
}
输出:

/* 1 */
{
    "_id" : ObjectId("5dd859f93d319574a17e9be9"),
    "members" : [ 
        "FOXF1", 
        "GATA6", 
        "SOX9", 
        "TWIST1", 
        "ZEB1", 
        "ZEB2"
    ]
}

/* 2 */
{
    "_id" : ObjectId("5dd85a053d319574a17e9e0c"),
    "members" : [ 
        "FOXF11", 
        "GATA61", 
        "SOX91", 
        "TWIST11", 
        "ZEB11", 
        "ZEB21"
    ]
}

/* 3 */
{
    "_id" : ObjectId("5dd85a0f3d319574a17ea02a"),
    "members" : [ 
        "FOXF1"
    ]
}

/* 4 */
{
    "_id" : ObjectId("5dd85a1a3d319574a17ea29d"),
    "members" : [ 
        "FOXF1", 
        "ZEB2"
    ]
}

/* 5 */
{
    "_id" : ObjectId("5dd85a263d319574a17ea4fa"),
    "members" : [ 
        "FOXF1", 
        "GATA61", 
        "SOX91", 
        "TWIST11", 
        "ZEB1", 
        "ZEB2"
    ]
}

/* 6 */
{
    "_id" : ObjectId("5dd85a343d319574a17ea79c"),
    "members" : [ 
        "FOXF1", 
        "GATA6", 
        "SOX9"
    ]
}

/* 7 */
{
    "_id" : ObjectId("5dd85a433d319574a17eaa4b"),
    "members" : [ 
        "FOXF1", 
        "GATA6", 
        "SOX9", 
        "TWIST1"
    ]
}

/* 8 */
{
    "_id" : ObjectId("5dd85a4d3d319574a17eab7a"),
    "members" : []
}

/* 9 */
{
    "_id" : ObjectId("5dd85a573d319574a17eac89"),
    "members1" : ""
}
/* 1 */
{
    "_id" : ObjectId("5dd859f93d319574a17e9be9"),
    "matchingCount" : 6,
    "matchingMembers" : [ 
        "FOXF1", 
        "GATA6", 
        "SOX9", 
        "TWIST1", 
        "ZEB1", 
        "ZEB2"
    ]
}

/* 2 */
{
    "_id" : ObjectId("5dd85a433d319574a17eaa4b"),
    "matchingCount" : 4,
    "matchingMembers" : [ 
        "FOXF1", 
        "GATA6", 
        "SOX9", 
        "TWIST1"
    ]
}

/* 3 */
{
    "_id" : ObjectId("5dd85a263d319574a17ea4fa"),
    "matchingCount" : 3,
    "matchingMembers" : [ 
        "FOXF1", 
        "ZEB1", 
        "ZEB2"
    ]
}

/* 4 */
{
    "_id" : ObjectId("5dd85a343d319574a17ea79c"),
    "matchingCount" : 3,
    "matchingMembers" : [ 
        "FOXF1", 
        "GATA6", 
        "SOX9"
    ]
}

/* 5 */
{
    "_id" : ObjectId("5dd85a1a3d319574a17ea29d"),
    "matchingCount" : 2,
    "matchingMembers" : [ 
        "FOXF1", 
        "ZEB2"
    ]
}

/* 6 */
{
    "_id" : ObjectId("5dd85a0f3d319574a17ea02a"),
    "matchingCount" : 1,
    "matchingMembers" : [ 
        "FOXF1"
    ]
}

这个问题完美地解决了问题,完全符合我的要求。非常感谢你。