Mongoose搜索最大子数组中的元素

时间:2017-07-04 11:59:35

标签: arrays node.js mongodb

我的架构如下

{
  product:[{
    structure :[{
      version:[{
        type:[{
          values:[{}]
        }]
      }]
    }]
  }]
}

需要搜索values数组中的字段。 实际上我需要更新values数组中的字段。我无法编写查询来获取子数组值。我怎样才能做到这一点。请尽快告诉我。

1 个答案:

答案 0 :(得分:0)

您可以使用以下类型的查询:

// match a one name
db.getCollection('test').find({"product.structure.version.type.values.name":'test'})
// match some value from an array
db.getCollection('test').find({"product.structure.version.type.values.name": {$in: [1, 'test']}})

上次查询将在下一个集合中找到3个项目:

/* 1 */
{
    "_id" : ObjectId("595b9e17c482ca1b99db23a6"),
    "product" : [ 
        {
            "structure" : [ 
                {
                    "version" : [ 
                        {
                            "type" : [ 
                                {
                                    "values" : [ 
                                        {
                                            "name" : 1
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

/* 2 */
{
    "_id" : ObjectId("595b9e68f9f2fe8d79ca4c82"),
    "product" : [ 
        {
            "structure" : [ 
                {
                    "version" : [ 
                        {
                            "type" : [ 
                                {
                                    "values" : [ 
                                        {
                                            "name" : 3
                                        }, 
                                        {
                                            "name" : 4
                                        }, 
                                        {
                                            "name" : 1
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

/* 3 */
{
    "_id" : ObjectId("595b9e71f9f2fe8d79ca4c84"),
    "product" : [ 
        {
            "structure" : [ 
                {
                    "version" : [ 
                        {
                            "type" : [ 
                                {
                                    "values" : [ 
                                        {
                                            "name" : 5
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

/* 4 */
{
    "_id" : ObjectId("595ba08af9f2fe8d79ca4cd9"),
    "product" : [ 
        {
            "structure" : [ 
                {
                    "version" : [ 
                        {
                            "type" : [ 
                                {
                                    "values" : [ 
                                        {
                                            "name" : 6
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

/* 5 */
{
    "_id" : ObjectId("595ba0f1f9f2fe8d79ca4d00"),
    "product" : [ 
        {
            "structure" : [ 
                {
                    "version" : [ 
                        {
                            "type" : [ 
                                {
                                    "values" : [ 
                                        {
                                            "name" : "test"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

<强>更新 要执行更新查询,您需要执行以下操作:

db.getCollection('test').update({"product.structure.version.type.values.name": {$in: [1, 'test']}}, {$set: {"product.$.testProp": 'some test string'}}, {multi: true})