查询字符串字段

时间:2017-10-27 18:40:17

标签: mongodb mongodb-query

在使用Jena对大型本体执行查询后,我将结果以JSON格式导出到名为 galileo 的数据库中名为 items 的MongoDB集合中。
现在我想查询集合按名称查找项目(名称位于标题字段中),特别是我希望搜索“ Astrolabio < / em>“,我可以在标题栏中检索包含” Astrolabio “字样的所有对象(例如” Astrolabio “,” Astrolabio Piano “etc ...”。我感兴趣的对象包含在 @graph 数组中 我试过了

db.items.find({"@graph":{$elemMatch:{"title":{$regex: /Astrolabio$/}}}})

但它返回了许多不包含搜索词的对象
我也试过了

db.items.find({},{"@graph":{$elemMatch:{"title":{$regex: /Astrolabio$/}}}})

但是,正如我在尝试之后才发现的那样,它只返回与请求匹配的第一个对象 那么对于我正在尝试做什么的正确查询是什么? 为了提供帮助,这里有一小部分文件

{
"_id" : ObjectId("59e07632b5d295462b330c4c"),
"@graph" : [ 
    {
        "@id" : "http://minerva.atcult.it/rdf/000000016001",
        "@type" : [ 
            "bibo:Book", 
            "bibo:MultiVolumeBook"
        ],
        "P1053" : [ 
            "1 astrolabe", 
            "1 astrolabio"
        ],
        "abstract" : [ 
            "This astrolabe presently comprises two tympanums, for latitudes 30° and 33°, the other for latitudes 36° and 42° (corresponding to the regions between Persia and the Black Sea). There is an alidade, a rule, and a rete. The back carries a double shadow square and the zodiacal calendar. The instrument comes with a tooled black leather case (cover missing) containing a sixteenth-century manuscript note stating that the astrolabe was brought from Spain and dates from 1252. The astronomical data inscribed on the astrolabe suggest it may have been built before 1000. According to tradition, the instrument dates from the period of Charlemagne (9th C. ). A very similar Arab astrolabe is documented in a drawing by Antonio da Sangallo il Giovane [the Younger] (c.  1520?) at the Gabinetto dei Disegni e delle Stampe (Department of Drawings and Prints) of the Uffizi. Provenance: Medici collections", 
            "Questo astrolabio contiene attualmente due timpani, uno per le latitudini 30° e 33°, e l'altro 36° e 42° (corrispondenti alle regioni comprese tra la Persia e il Mar Nero). È completo di alidada, di regolo e di rete. Nel dorso presenta un doppio quadrato delle ombre e il calendario zodiacale. Lo strumento, proveniente dalle collezioni medicee, è completo di custodia di pelle nera lavorata (coperchio mancante) che porta all'interno una nota manoscritta del XVI secolo nella quale si ricorda che l'astrolabio fu portato dalla Spagna e che risale al 1252. I dati astronomici riportati sullo strumento suggeriscono di anticiparne la costruzione a prima del 1000. Secondo la tradizione si tratterebbe di uno strumento del tempo di Carlo Magno (IX secolo). Un astrolabio arabo molto simile a questo è documentato in un disegno di Antonio da Sangallo il Giovane (c. 1520?) conservato presso il Gabinetto dei Disegni e delle Stampe degli Uffizi. Proviene dalle collezioni medicee"
        ],
        "contributor" : "http://minerva.atcult.it/rdf/ed494c3a-2ba6-3464-b34a-a57e4f70c5e0",
        "creator" : [ 
            "http://minerva.atcult.it/rdf/d481cbac-209b-3741-bba4-906590d805b3", 
            "http://minerva.atcult.it/rdf/36e6efa2-6c8f-350e-ae37-479dade48850", 
            "http://minerva.atcult.it/rdf/47734211-2637-3895-a690-4f33412931ec"
        ],
        "identifier" : "000000016001",
        "issued" : "sec. X",
        "publisher" : "http://minerva.atcult.it/rdf/90310a84-1133-3356-bb3b-647ae1a7d14d",
        "title" : "Astrolabio piano",
        "numPages" : [ 
            "1 astrolabio", 
            "1 astrolabe"
        ],
        "placeOfPublication" : "Fattura araba",
        "label" : "Astrolabio piano"
    }, 
    {
        "@id" : "http://minerva.atcult.it/rdf/000000016002",
        "@type" : [ 
            "bibo:MultiVolumeBook", 
            "bibo:Book"
        ],
        "P1053" : [ 
            "1 astrolabe", 
            "1 astrolabio"
        ],
        "abstract" : [ 
            "Questo piccolo astrolabio contiene quattro timpani per le latitudini 24° e 30°, 31° e 35°, 32° e 36° (corrispondenti alla Persia) e per le latitudini 0° (cioè il circolo dell'equatore) e 66°. È completo di alidada e di rete. Il dorso della madre presenta il calendario lunare, secondo l'uso islamico, un quadrato delle ombre e un quadrante. Lo strumento reca la data 496 dell'Egira (1102-1103 dell'età Cristiana) ed è firmato dal suo artefice, Muhammad 'Ibn Abi'l Qasim 'Ibn Bakran, del quale non si hanno notizie. Fu donato al Museo di Storia della Scienza dal Principe fiorentino Tommaso Corsini", 
            "This small astrolabe carries four tympanums for latitudes 24°/30°, 31°/35°, and 32°/36° (corresponding to Persia), and for latitude 0° (i. e. , the circle of the equator) and 66°. There is an alidade and a rete. The back of the mater displays a lunar calendar, in accordance with Islamic use, a shadow square, and a quadrant. The instrument is dated 496 of the Hegira (1102-1103 of the Christian era) and is signed by its maker, Muhammad 'Ibn Abi'l Qasim 'Ibn Bakran, on whom we have no information. Donated to the Museo di Storia della Scienza by the Florentine Prince Tommaso Corsini"
        ],
        "creator" : [ 
            "http://minerva.atcult.it/rdf/c5738e64-fb77-354a-8fc8-47164105b5f7", 
            "http://minerva.atcult.it/rdf/3fa79916-cb7f-3574-a3fb-589ca42ebf17"
        ],
        "identifier" : "000000016002",
        "issued" : "1102-1103",
        "publisher" : "http://minerva.atcult.it/rdf/90310a84-1133-3356-bb3b-647ae1a7d14d",
        "title" : "Astrolabio piano",
        "numPages" : [ 
            "1 astrolabio", 
            "1 astrolabe"
        ],
        "placeOfPublication" : "Fattura araba",
        "label" : "Astrolabio piano"
    }, 

1 个答案:

答案 0 :(得分:1)

如果你需要在结果中只有@graph数组中与查询匹配的元素(如果title包含单词Astrolabio),你可以使用以下聚合框架查询来达到:

db.items.aggregate([     
    {$match: {"@graph.title": /Astrolabio/}},      
    {$unwind: "$@graph"},      
    {$match: {"@graph.title": /Astrolabio/} }, 
    {$group: {"_id": "$_id", "@graph": {"$push": "$@graph" } }}  
]);

你的正则表达式{$regex: /Astrolabio$/}将仅返回标题为'Astrolabio'的文档,因为最后一个单词是一个句子(“Astrolabio钢琴”将不包括在内,因为'钢琴'是这里的最后一个单词)。