programing

mongo 셸에서 문서 필드를 보는 방법은 무엇입니까?

topblog 2023. 6. 22. 21:25
반응형

mongo 셸에서 문서 필드를 보는 방법은 무엇입니까?

mongo의 셸에 있는 동안 문서의 필드/키를 파악할 수 있는 방법이 있습니까?예를 들어, (의사 코드)와 같은 문서가 있다고 가정합니다.

{
    "message": "Hello, world",
    "from": "hal",
    "field": 123
}

해당 문서의 필드/키 목록을 반환하는 명령을 셸에서 실행하려고 합니다.예를 들어, 다음과 같은 것이 있습니다.

> var message = db.messages.findOne()
> message.keys()
... prints out "message, from, field"

더욱 간편한 기능:

Object.keys(db.messages.findOne())

A for ... in루프가 트릭을 수행해야 합니다.

> var message = db.messages.findOne();
> for (var key in message) {
... print(key);
... }

다른 답들은 맞습니다.

하지만 저는 완전히 새로운 사람이기 때문에 위의 명령어가 어디서 어떻게 실행되어야 하는지 이해하지 못했습니다.

밑에서 도와줬어, 내 깃허브에서.
Windows의 경우:명령 프롬프트(cmd)에서 이 코드를 실행합니다.
Mac 또는 Linux에서: 터미널 창에서 이 코드를 실행합니다.

// ------------
// start mongo client
mongo

// ------------

// list all databases
show dbs
// NOTE: assume one of the databases is myNewDatabase

// use the 'myNewDatabase' database
use myNewDatabase

// ------------

// show all collections of 'myNewDatabase' database
show collections
// NOTE: assume one of the collections is 'myCollection'

// show all documents of 'myCollection' collection
db.myCollection.find()

// ------------

// field keys
Object.keys(db.myCollection.findOne());

// values
db.myCollection.find().forEach(function(doc) {
    for (field in doc) {
        print(doc[field]);
    }
});

// ------------

MongoDB에서 컬렉션에 사용되는 모든 필드의 목록을 얻으려면 다음과 같이 해야 합니다(마일리지는 다를 수 있습니다:).

다음 내용을 사용하여 .js 파일을 만듭니다.

use yourdbname
mr = db.runCommand({
  "mapreduce" : "collectionName",
  "map" : function() {
    for (var key in this) { emit(key, null); }
  },
  "reduce" : function(key, stuff) { return null; },
  "out": "collectionName" + "_keys"
})
db[mr.result].distinct("_id")

여기서 이 작업을 수행하는 방법을 알아냈습니다(지오프테크

콘솔에서 출력을 인쇄하기 위해 셸에서 실행했습니다.

mongo < nameOfYourFile.js 

또는 출력을 텍스트 파일에 덤프합니다.

mongo < nameOfYourFile.js > outputDir\nameOfYourOutputFile.txt

저는 MongoDb에 완전히 익숙하지 않아서 문서 전체에서 사용에 관계없이 모든 필드가 실제로 제공되기를 바랍니다!

(저는 윈도우 10에서 MongoDb를 사용하고 있어서 제 콘솔이 당신의 콘솔과 다를 수 있습니다.)

컬렉션의 모든 문서에 일부 필드가 있는 것은 아니라도 컬렉션을 작성하지 않고 모든 필드를 가져오는 방법으로 이 작업을 수행할 수 있습니다.

    return db.collectionName.aggregate( [
      { $project : { x : { $objectToArray : "$$ROOT" } } },
      { $unwind : "$x" },
      { $group : { _id : null, keys : { $addToSet : "$x.k" } } },
    ] ).toArray()[0].keys.sort();

이것은 또한 Mongo 쉘에 추가할 수 있는 편리한 것으로, 당신은 그것을 포함함으로써 할 수 있습니다..mongorc.js홈 디렉토리의 파일:

Object.assign( DBCollection.prototype, {
  getAllFieldNames() {
    return db[ this._shortName ].aggregate( [
      { $project : { x : { $objectToArray : "$$ROOT" } } },
      { $unwind : "$x" },
      { $group : { _id : null, keys : { $addToSet : "$x.k" } } },
    ] ).toArray()[0].keys.sort();
  },
} );

그러면 그냥 하면 됩니다.db.myCollection.getAllFieldNames()셸을 사용할 때..

var task = db.task.find().next()
for (let key in task){print(key)}

enter image description here

언급URL : https://stackoverflow.com/questions/5900792/how-to-view-document-fields-in-mongo-shell

반응형