No meu MongoDB, tenho uma coleção de alunos com 10 registros com campos name
e roll
. Um registro desta coleção é:
{
"_id" : ObjectId("53d9feff55d6b4dd1171dd9e"),
"name" : "Swati",
"roll" : "80",
}
Quero recuperar o campo roll
apenas para todos os 10 registros da coleção, como faríamos no banco de dados tradicional usando:
SELECT roll FROM student
Eu passei por muitos blogs, mas todos estão resultando em uma consulta que deve conter uma WHERE
cláusula, por exemplo:
db.students.find({ "roll": { $gt: 70 })
A consulta é equivalente a:
SELECT * FROM student WHERE roll > 70
Minha exigência é encontrar uma única chave apenas sem nenhuma condição. Então, qual é a operação de consulta para isso.
mongodb
projection
Shipra Swati
fonte
fonte
Respostas:
Nos documentos do MongoDB :
Neste exemplo dos povos no Mongo, os documentos retornados conterá apenas os campos de
item
,qty
e_id
.Portanto, você deve poder emitir uma declaração como:
A declaração acima selecionará todos os documentos da coleção de alunos e o documento retornado retornará apenas o
roll
campo (e excluirá o_id
).Se não mencionarmos,
_id:0
os campos retornados serãoroll
e_id
. O campo '_id' é sempre exibido por padrão. Então, precisamos mencionar explicitamente_id:0
junto comroll
.fonte
0
para 9 deles? Edit: Deixa pra lá, excluindo,_id
ou seja,{field_I_want:1, _id:0}
parece funcionar #With the exception of the _id field, you cannot combine inclusion and exclusion statements in projection documents.
Isso pode ser interessante para alguns de vocês. ( source )obter todos os dados da tabela
obter todos os dados da tabela sem _id
obtenha todos os dados de um campo com _id
obtenha todos os dados de um campo sem _id
encontre dados especificados usando a cláusula where
encontre um dado usando a cláusula where e maior que a condição
encontre dados usando a cláusula where e maior ou igual à condição
encontre dados usando a cláusula where e menor ou igual à condição
encontre um dado usando a cláusula where e menos que condicionar
fonte
db.student.find({}, {_id:0})
Obrigado pela ajuda.Eu acho que mattingly890 tem a resposta correta, aqui está outro exemplo junto com o padrão / comando
db.collection.find( {}, {your_key:1, _id:0})
fonte
Aqui está, 3 maneiras de fazer, Mais curto para o chato:
Para remover um campo específico, use o
-
operador:fonte
Apenas para fins educacionais, você também pode fazê-lo de qualquer uma das seguintes maneiras:
1
2)
`
fonte
Tente a seguinte consulta:
Espero que isto ajude!!
fonte
No seu exemplo, você pode fazer algo como:
Projeção
NOTA
CONSULTE MAIS INFORMAÇÃO
fonte
Embora a resposta de gowtham esteja completa, é importante notar que esses comandos podem diferir da API para outra (para aqueles que não usam o shell do mongo).
Consulte o link da documentação para obter informações detalhadas.
Os Nodejs , por exemplo, têm um método chamado `projection que você acrescentaria à sua função find para projetar.
Seguindo o mesmo conjunto de exemplos, comandos como os seguintes podem ser usados com o Node:
db.student.find({}).project({roll:1})
Ou
db.student.find({}).project({roll:1, _id: 0})
e assim por diante.
Novamente para usuários do nodejs, não se esqueça (com o que você já deveria estar familiarizado se usou essa API antes) para usar
toArray
para anexar seu.then
comando.fonte
Para uma melhor compreensão, escrevi uma consulta MySQL semelhante.
fonte
Isso funciona para mim,
nenhuma condição na cláusula where, ou seja, dentro das primeiras chaves. dentro dos próximos chavetas: lista de nomes de campos de projeção a serem necessários no resultado e 1 indica que um campo específico é a parte do resultado da consulta
fonte
fonte
A consulta para taxas do MongoDB aqui é coleta e descrição é um campo.
fonte
Se você deseja recuperar o campo "roll" apenas para todos os 10 registros nas coleções. Então tente isso.
No MongoDb:
No Sql:
fonte
Eu só quero adicionar às respostas que, se você quiser exibir um campo aninhado em outro objeto, poderá usar a seguinte sintaxe
db.collection.find( {}, {{'object.key': true}})
Aqui a chave está presente dentro do objeto chamado object
fonte
Isso é equivalente a -
db.student.find ({}, {"roll": 1, "name": 1, "_id": 0})
Isso é equivalente a -
fonte
Use a Consulta como esta no shell:
1. Use
database_name
2. Que retorna apenas informações específicas de campo dos ativos quando correspondidas,
_id:0
especifica para não exibir o ID no resultadofonte
No mongodb 3.4, podemos usar a lógica abaixo, não tenho certeza sobre as versões anteriores
selecione rolo do aluno ==> db.student.find (! {}, {roll: 1})
a lógica acima ajuda a definir algumas colunas (se forem menores)
fonte
Usando o Studio 3T para MongoDB, se eu usá-
.find({}, { _id: 0, roll: true })
lo ainda retornará uma matriz de objetos com uma_id
propriedade vazia .O uso do JavaScript
map
me ajudou a recuperar apenas aroll
propriedade desejada como uma matriz de string:fonte
Não sei se isso responde à pergunta, mas acredito que vale a pena mencionar aqui. Há mais uma maneira de selecionar um campo (e não vários) usando
db.collection_name.distinct();
por exemplo,
db.student.distinct('roll',{});
Ou, segunda maneira: Usando
db.collection_name.find().forEach();
(vários campos podem ser selecionados aqui por concatenação)por exemplo,
db.collection_name.find().forEach(function(c1){print(c1.roll);});
fonte