shell 中的 mongodb:尝试获取特定值

问题描述 投票:0回答:3

我尝试使用“mongoexport”来检索“Url”值:

$ mongoexport -d "db" -c "collection" -q '{"Id":"5400490185"} | jq .

返回:

{
  "_id": {
    "$oid": "641e8845c0a3fde195b5901b"
  },
  "Url": "https://example.org",
  "Id": "5400490185",
  "Title": "xxx",
  "Description": "foobar",
  "Date_Time": "1679697365"
}

现在我尝试只从文档中获取“Url”https://www.mongodb.com/docs/manual/reference/sql-comparison/应该是

db.people.find(
    { status: "A" },
    { user_id: 1, status: 1, _id: 0 }
)

所以我尝试:

$ mongoexport -d "db" -c "collection" -q '{"Id":"5400490185"}, {"Url": "1", _id: "0"}'

但我明白了

invalid character ',' after top-level value

怎么了?

也试过:

$ mongoexport -d "db" -c "collection" -q '{"Id":"5400490185"}' -f 'Url'

但没有产生预期的效果

mongodb mongo-shell
3个回答
0
投票

找到解决方法:

$ mongoexport -d "db" -c "collection" -q '{"Id":"5400490185"}'  --jsonArray | jq '.[] | .Url'

但我想有更好的方法可以不用管道。


0
投票

找到解决方法:

$ mongoexport -d "db" -c "collection" -q '{"Id":"5400490185"}'  --jsonArray | jq '.[] | .Url'

但我想有更好的方法可以不用管道。

编辑:在 Python 和 shell here-doc 中更容易('mongodb' JS 查询语法很糟糕):

#!/bin/bash

mydb='foobar'

if [[ ! $1 ]]; then
    cat<<-EOF >&2
    Usage: ${0##*/} <collection> [id]
    EOF
    exit 1
fi

if [[ $2 ]]; then
    python<<-EOF
    from pymongo import MongoClient
    client = MongoClient('mongodb://localhost:27017/')
    mydb = client['$mydb']
    mycol = mydb["${1:?}"]
    c = mycol.find_one({"Id": "$2"})
    print(c['Title'], c['Description'], c['Url'], sep="\\n")
    client.close()
    EOF
else
    python<<-EOF
    from pymongo import MongoClient
    client = MongoClient('mongodb://localhost:27017/')
    mydb = client['texas']
    mycol = mydb["${1:?}"]
    for c in mycol.find():
        print(c['Url'], c['Title'], c['Description'], sep="\\n")
    client.close()
    EOF
fi

用法:

Usage mongo-parse.sh <collection> [id]

简单、清晰、高效。


0
投票

你也可以使用

mongosh

db.people.find(
    { status: "A" }
).forEach({doc => 
   print(doc.Url)
})

db.people.find({ status: "A" }).map(doc => doc.Url)

如果它不起作用,请尝试

db.people.find(...).toArray().forEach(...)
.

单线

mongosh --eval 'db.people.find({ status: "A" }).forEach({doc => print(doc.Url)})'
© www.soinside.com 2019 - 2024. All rights reserved.