【问题标题】:Create a document with an array from filtered elements in an existing document array从现有文档数组中的过滤元素创建一个包含数组的文档
【发布时间】:2015-11-19 02:42:26
【问题描述】:

我以前问过这个问题,但没有以最清楚的方式问过,因为我没有回复:(所以我想我会再试一次。

我有一个如下所示的文档,我想创建一个新文档,它只选择语言 = "English" 的数组中的名称。

{
"_id" : ObjectId("564d35d5150699558156942b"),
"objectCategory" : "Food",
"objectType" : "Fruit",
"objectName" : [ 
    {
        "language" : "English",
        "name" : "Apple"
    }, 
    {
        "language" : "French",
        "name" : "Pomme"
    }, 
    {
        "language" : "English",
        "name" : "Strawberry"
    }, 
    {
        "language" : "French",
        "name" : "Fraise"
    }
]

}

我希望 $out 文档如下所示。我知道我可以按内容过滤文档,但是我想在单个文档中进行过滤,而不是在集合中进行过滤。为了首先获得正确的文档,我会查询 $find objectCategory = "Food" 和 objectType = "Fruit"

{
"_id" : ObjectId("564d35d5150699558156942b"),
"objectCategory" : "Food",
"objectType" : "Fruit",
"objectName" : [ 
      "name" : "Apple",
      "name" : "Strawberry"
]

} 谢谢,马特

【问题讨论】:

    标签: arrays mongodb find element


    【解决方案1】:

    哇,啊,我真的以为我找到了它: db.serviceCatalogue.find({objectName: {"$elemMatch": {language: "English"}}}, {"objectName.name": 1})

    ;感谢:Retrieve only the queried element in an object array in MongoDB collection

    但是,它什么也没做,我一定是梦想它起作用了。如何获取名为 language = 'English' 的字段的值所在的数组位置?

    这只是我想做的一个例子,看起来这很痛苦,尤其是除了我之外没有人回答:)

    【讨论】:

    • 啊,耻辱。它适用于一个文档,但不适用于另一个文档。无法理解为什么。查看stackoverflow.com/questions/33728093/… 我尝试了 db.globalData.find({businessType: {"$elemMatch": {language: "English"}}}, {"businessType.businessTypeDesc": 1}) ,它忽略了我的请求,只是向我展示了所有细节较少但同时具有法语和英语的文件 - 真烦人!
    猜你喜欢
    • 1970-01-01
    • 2018-01-26
    • 2017-03-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    相关资源
    最近更新 更多