我尝试使用“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'
但没有产生预期的效果
找到解决方法:
$ mongoexport -d "db" -c "collection" -q '{"Id":"5400490185"}' --jsonArray | jq '.[] | .Url'
但我想有更好的方法可以不用管道。
找到解决方法:
$ 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]
简单、清晰、高效。
你也可以使用
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)})'