【问题标题】:how to make query to don't bring field if exists in mongodb如果mongodb中存在,如何进行查询以不带字段
【发布时间】:2017-09-01 16:12:33
【问题描述】:

我想进行一个带入所有文档的查询,但是如果存在某些特定字段,则从文档中删除字段并从文档中带入所有其余字段。 例如,如果我在 mongodb 中有 3 个文档,我想获取所有文档 where aptype = "periodic",如果文档中存在 cancel_date 字段,则只获取没有 cancel_date 字段的文档

{  
   "_id":"8de3e5ec-caa9-4497-89a9-239713e2a2ed",
   "user_id":"6b54be23-0880-4e22-8882-93feea935f12",
   "weekend_price":60000,
   "weekend_wage":40000,
   "active":1,
   "dows":[  
      "2",
      "1",
      "6"
   ],
   "product_type_id":"adsfkasjd12312",
   "working_time":320,
   "datetime": ISODate("2017-09-11T10:10:00Z"),
   "price":60000,
   "office_id":"testoffice",
   "wage":40000,
   "manager_id":"653d047a-e9e3-4161-b2b6-7308f9ad38e5",
   "product_id":"543bee5b-43a0-4c98-976f-a371cafb33e4",
   "aptype":"periodic",
   "cancel_date":[  
      ISODate("2017-09-13T00:00:00Z")
   ]
}

{  
   "_id":"5df00497-e95a-4124-abb0-2ade426c741f",
   "product_type_id":"adsfkasjd12312",
   "working_time":320,
   "datetime": ISODate("2017-09-03T10:10:00Z"),
   "wage":100000,
   "aptype":"periodic",
   "dows":[  
      "1",
      "4",
      "6"
   ],
   "price":111111,
   "active":1,
   "weekend_price":70000,
   "weekend_wage":50000,
   "user_id":"c1676bd5-d9b3-452d-8c93-f710176bb33c",
   "office_id":"testoffice",
   "product_id":"140ceaad-1832-444c-95f6-c8053b242bcb",
   "manager_id":""
}

{  
   "_id":"e5d5a046-caf7-4372-a101-f5260ec0af0a",
   "product_type_id":"adsfkasjd12312",
   "working_time":320,
   "datetime": ISODate("2017-09-02T10:10:00Z"),
   "wage":40000,
   "aptype":"one_time",
   "price":60000,
   "active":1,
   "weekend_price":60000,
   "weekend_wage":40000,
   "user_id":"c1676bd5-d9b3-452d-8c93-f710176bb33c",
   "office_id":"testoffice",
   "product_id":"543bee5b-43a0-4c98-976f-a371cafb33e4",
   "manager_id":""
}

所以我想要的结果是(取消日期字段已删除where _id='8de3e5ec-caa9-4497-89a9-239713e2a2ed'

{  
   "_id":"8de3e5ec-caa9-4497-89a9-239713e2a2ed",
   "user_id":"6b54be23-0880-4e22-8882-93feea935f12",
   "weekend_price":60000,
   "weekend_wage":40000,
   "active":1,
   "dows":[  
      "2",
      "1",
      "6"
   ],
   "product_type_id":"adsfkasjd12312",
   "working_time":320,
   "datetime": ISODate("2017-09-11T10:10:00Z"),
   "price":60000,
   "office_id":"testoffice",
   "wage":40000,
   "manager_id":"653d047a-e9e3-4161-b2b6-7308f9ad38e5",
   "product_id":"543bee5b-43a0-4c98-976f-a371cafb33e4",
   "aptype":"periodic"
}

{  
   "_id":"5df00497-e95a-4124-abb0-2ade426c741f",
   "product_type_id":"adsfkasjd12312",
   "working_time":320,
   "datetime": ISODate("2017-09-03T10:10:00Z"),
   "wage":100000,
   "aptype":"periodic",
   "dows":[  
      "1",
      "4",
      "6"
   ],
   "price":111111,
   "active":1,
   "weekend_price":70000,
   "weekend_wage":50000,
   "user_id":"c1676bd5-d9b3-452d-8c93-f710176bb33c",
   "office_id":"testoffice",
   "product_id":"140ceaad-1832-444c-95f6-c8053b242bcb",
   "manager_id":""
}

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    查看此文档如何在 mongodb 中消除 select 中的字段。 https://docs.mongodb.com/v3.0/tutorial/project-fields-from-query-results/

    例如

    db.yourtablename.find( { aptype : 'periodic' }, {  cancel_date :0 } )
    

    此查询将删除 select 语句中的 cancel_date。

    【讨论】:

    • 感谢您的帮助。但是,这只会带来存在 cancel_date 的文档,我还想带来不存在 cancel_date 的文档。
    • 这将带来两个文件。检查一次。此查询表示如果在 mongodb 中的数据中,则消除 cancel_date
    • 哦,是的,你是对的,我认为完全错误的方式谢谢。
    猜你喜欢
    • 2012-02-19
    • 2022-12-08
    • 2011-09-12
    • 2020-05-14
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 2021-10-09
    • 2020-07-05
    相关资源
    最近更新 更多