Shi*_*ati 191 projection mongodb
在我的MongoDB中,我有一个学生集合,有10个记录,包含字段name
和roll
.该系列的一个记录是:
{
"_id" : ObjectId("53d9feff55d6b4dd1171dd9e"),
"name" : "Swati",
"roll" : "80",
}
Run Code Online (Sandbox Code Playgroud)
我想只检索roll
集合中所有10条记录的字段,就像我们在传统数据库中一样,使用:
SELECT roll FROM student
Run Code Online (Sandbox Code Playgroud)
我浏览了很多博客,但所有博客都产生了一个查询,其中必须有WHERE
条款,例如:
db.students.find({ "roll": { $gt: 70 })
Run Code Online (Sandbox Code Playgroud)
该查询相当于:
SELECT * FROM student WHERE roll > 70
Run Code Online (Sandbox Code Playgroud)
我的要求是只在没有任何条件的情况下找到一个密钥.那么,该查询操作是什么.
the*_*ica 218
来自MongoDB文档:
投影可以明确地包括几个字段.在以下操作中,find()方法返回与查询匹配的所有文档.在结果集中,只有item和qty字段,默认情况下,_id字段在匹配的文档中返回.
db.inventory.find({type:'food'},{item:1,qty:1})
在从蒙戈的乡亲这个例子中,返回的文档将只包含的领域item
,qty
和_id
.
因此,您应该能够发出如下声明:
db.student.find({}, {roll:1, _id:0})
Run Code Online (Sandbox Code Playgroud)
上述语句将选择学生集合中的所有文档,并且返回的文档将仅返回该roll
字段(并排除_id
).
如果我们不提及_id:0
返回的字段将是roll
和_id
.默认情况下始终显示"_id"字段.因此,我们需要明确提到_id:0
沿roll
.
Gow*_*raj 100
从表中获取所有数据而不使用_id
db.student.find({})
Run Code Online (Sandbox Code Playgroud)
SELECT*FROM student
使用_id从一个字段获取所有数据
db.student.find({}, {_id:0})
Run Code Online (Sandbox Code Playgroud)
SELECT roll FROM student
从一个字段获取所有数据而不使用_id
db.student.find({}, {roll:1})
Run Code Online (Sandbox Code Playgroud)
使用where子句查找指定的数据
db.student.find({}, {roll:1, _id:0})
Run Code Online (Sandbox Code Playgroud)
SELECT*FROM学生WHERE roll = '80'
使用where子句和大于条件查找数据
db.student.find({roll: 80})
Run Code Online (Sandbox Code Playgroud)
SELECT*FROM student WHERE roll> '70'
使用where子句并且小于或等于condition查找数据
db.student.find({ "roll": { $gt: 70 }}) // $gt is greater than
Run Code Online (Sandbox Code Playgroud)
SELECT*FROM student WHERE roll <='70'
使用where子句和小于条件查找数据
db.student.find({ "roll": { $gte: 70 }}) // $gte is greater than or equal
Run Code Online (Sandbox Code Playgroud)
SELECT*FROM学生WHERE roll <'70'
这是您的最爱,最无聊的三种方式:
db.student.find({}, 'roll _id'); // <--- Just multiple fields name space separated
// OR
db.student.find({}).select('roll _id'); // <--- Just multiple fields name space separated
// OR
db.student.find({}, {'roll' : 1 , '_id' : 1 ); // <---- Old lengthy boring way
Run Code Online (Sandbox Code Playgroud)
要删除特定字段,请使用-
运算符:
db.student.find({}).select('roll -_id') // <--- Will remove id from result
Run Code Online (Sandbox Code Playgroud)
仅出于教育目的,您还可以通过以下任何一种方式来做到这一点:
1。
var query = {"roll": {$gt: 70};
var cursor = db.student.find(query);
cursor.project({"roll":1, "_id":0});
Run Code Online (Sandbox Code Playgroud)
2。
var query = {"roll": {$gt: 70};
var projection = {"roll":1, "_id":0};
var cursor = db.student.find(query,projection);
Run Code Online (Sandbox Code Playgroud)
`
请尝试以下查询:
db.student.find({}, {roll: 1, _id: 0}).pretty();
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!!
为了更好地理解,我编写了类似的 MySQL 查询。
Selecting specific fields
Run Code Online (Sandbox Code Playgroud)
MongoDB : db.collection_name.find({},{name:true,email:true,phone:true});
MySQL : SELECT name,email,phone FROM table_name;
Selecting specific fields with where clause
Run Code Online (Sandbox Code Playgroud)
MongoDB : db.collection_name.find({email:'you@email.com'},{name:true,email:true,phone:true});
MySQL : SELECT name,email,phone FROM table_name WHERE email = 'you@email.com';
db.<collection>.find({}, {field1: <value>, field2: <value> ...})
Run Code Online (Sandbox Code Playgroud)
在您的示例中,您可以执行以下操作:
db.students.find({}, {"roll":true, "_id":false})
Run Code Online (Sandbox Code Playgroud)
投影
projection参数确定在匹配文档中返回哪些字段。projection参数采用以下格式的文档:
{ field1: <value>, field2: <value> ... }
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)The <value> can be any of the following:
1或true,以将字段包括在退货凭证中。
0或false排除该字段。
注意
对于_id字段,您不必显式指定_id:1即可返回_id字段。除非您指定_id:0来禁止显示该字段,否则find()方法始终返回_id字段。
尽管gowtham的答案是完整的,但值得注意的是,这些命令可能与API上的命令有所不同(对于那些未使用mongo shell的命令)。
请参考文档链接以获取详细信息。
例如,Nodejs有一个名为`projection的方法,您可以将其附加到find函数以进行投影。
遵循相同的示例集,可以将以下命令与Node一起使用:
db.student.find({}).project({roll:1})
选择_id,从学生那里滚动
要么
db.student.find({}).project({roll:1, _id: 0})
从学生中选择卷
等等。
再次对Node.js用户来说,不要忘了(如果您以前使用过此API,您应该已经熟悉了什么)toArray
以便附加.then
命令。
归档时间: |
|
查看次数: |
238474 次 |
最近记录: |