Mongodb -如何只选择“n”列

qncylg1j  于 2022-11-22  发布在  Go
关注(0)|答案(3)|浏览(96)

我有一个包含15列的集合,希望只使用4列,但如果使用该集合,则会使用所有列

tb.find_one({'column1':'value'},{'_id':1, 'column1':1, 'column4':1, 'column2':1})

是否必须指定所有不需要的列?

p1iqtdky

p1iqtdky1#

您可以使用aggregation管道查询。使用$match$project$limit可以返回与特定条件匹配的文档的某些字段。
PyMongo示例:

# matches all documents with "column1" value of "value"
stage_1 = {"$match": {"column1": "value"}}

# pulls the values "_id", "column1", "column4", and "column2" into the query response
stage_2 = {"$project": {"_id": 1, "column1": 1, "column4": 1, "column2": 1}}

# limits the number of responses to 1
stage_3 = {"$limit": 1}

pipeline = [stage_1, stage_2, stage_3]

results = list(tb.aggregate(pipeline))
e1xvtsh3

e1xvtsh32#

您所做的完全正确。如果您只需要这些列,请使用1包含操作符指定它们。我很想知道您看到了什么建议:

from pymongo import MongoClient

tb = MongoClient()['mydatabase'].tb

tb.insert_one({f'column{x}': 'value' for x in range(15)})

print(tb.find_one({'column1': 'value'}, {'_id': 1, 'column1': 1, 'column4': 1, 'column2': 1}))

印刷品:

{'_id': ObjectId('5fd35c58b9e268dbd76d5299'), 'column1': 'value', 'column2': 'value', 'column4': 'value'}
b4lqfgs4

b4lqfgs43#

您可以在投影子句中将字段设定为0或false,以指定要排除的字段。文件中除了您指定要排除的字段之外,所有字段都会包含在查询结果中。

db.collection.find({
  "column1": 1
},
{
  "column10": 0,
  "column11": 0,
  "column12": 0,
  "column13": 0
})

这里有一个mongo playground供您参考。
引用:$project

相关问题