Mongo 查询搜索数据库的所有集合(Mongo/PyMongo)



我一直在如何查询每个文档的通用数据结构db

{
"_id": {
"$oid": "5e0983863bcf0dab51f2872b"
},
"word": "never",  // get the `word` value for each of below queries
"wordset_id": "a42b50e85e",
"meanings": [{
"id": "1f1bca9d9f",
"def": "not ever",
"speech_part": "adverb",
"synonyms": ["ne'er"]
}, {
"id": "d35f973ed0",
"def": "not at all",
"speech_part": "adverb"
}]
}

1( 查询以获取speech_part的所有word:"副词"(例如:从不,....(//

2(查询以获取以下所有wordword长度的6speech_part:"副词">

我从SO那里了解到,要首先搜索整个集合,我必须检索数据库中的所有集合,但是如何编写查询是我卡住的地方

db.collection.find({"meanings.speech_part":"adverb"},{"_id":0, "word":1})

获取上述特定speech_part的所有单词的数组是查询。

查询的第一部分是筛选器谓词,就像在您的场景中匹配speach_part一样,如果您的匹配列不在另一个对象或数组中的对象中,您可以编写{column_name: "something"}。 由于speech_part在数组内的对象内部,因此您必须编写{"parentClumn.key":"something"},在您的情况下{"meanings.speech_part":"adverb"}

其中查询的第二部分是投影,您可以在其中定义要在结果中使用哪些列。 因此,要仅获取您{word:1}的单词列值,要拥有更多列,您需要{word:1, etc:1}.虽然 mongodb 项目默认_id,因此要从结果中删除_id,您必须明确设置{_id:0}

db.collection.find({
"meanings.speech_part":"adverb", 
"$expr": { "$gt": [ { "$strLenCP": "$word" }, 6 ] }
},{"_id":0, "word":1})

获取长度大于 6 的特定speech_part的所有单词的数组。这是一个有点复杂的查询。您可以查找 $expr文档。在$expr中,您可以在列上运行函数并匹配结果。在您的情况下,strLenCP计算word列值的长度,然后检查它是否大于 6 乘$gt比较运算符

您可以尝试以下查询以获取匹配的行。你将不得不尝试同样的pymongo。

db.getCollection('test-collection').find(
{
'meanings.speech_part': 'adverb'
},
{
_id: 0,
word: 1
}
);

在这里阅读有关mongodb的投影: https://docs.mongodb.com/manual/tutorial/project-fields-from-query-results

最新更新