MongoDB:查找字段名称以开头的对象

时间:2018-12-07 11:06:27

标签: mongodb mongodb-query aggregation-framework

查询MongoDB:从给定的集合(请参见下面的示例),我只需要列出包含字段的对象,其中字段名称以“ need_”开头。

具有三个对象的集合的示例

/* 1 */
{
    "_id" : 1,
    "need_some" : "A",
    "need_more" : 1,
    "website_id" : "123456789"
}

/* 2 */
{
    "_id" : 2,
    "need_more" : 2,
    "website_id" : "123456789"
}

/* 3 */
{
    "_id" : 3,
    "website_id" : "123456789"
}

所需的输出:

/* 1 */
{
    "_id" : 1,
    "need_some" : "A",
    "need_more" : 1,
    "website_id" : "123456789"
}

/* 2 */
{
    "_id" : 2,
    "need_more" : 2,
    "website_id" : "123456789"
}

查询可能类似于

db.getCollection('nameCollection').find({ "need_.*"  : { "$exists" : true }})

1 个答案:

答案 0 :(得分:3)

您可以在mongodb 3.4 及更高版本

中使用$objectToArray使用以下聚合
db.collection.aggregate([
  { "$addFields": {
    "field": { "$objectToArray": "$$ROOT" }
  }},
  { "$match": { "field.k": { "$regex": "need_" }}},
  { "$project": { "field": 0 }}
])

会给你output

[
  {
    "_id": 1,
    "need_more": 1,
    "need_some": "A",
    "website_id": "123456789"
  },
  {
    "_id": 2,
    "need_more": 2,
    "website_id": "123456789"
  }
]