#python #mongodb
#python #mongodb
Вопрос:
У меня есть данные MongoDB, которые выглядят следующим образом:
{
"_id":"ObjectId(""607ddd26145c153476497e3f"")",
"official number":NumberLong(11198),
"mariners":[
{
"name":"John Williams",
"last_ship_name":"Majestic of Aberystwyth",
"this_ship_joining_port":"Llanelly",
"age":NumberLong(35),
"this_ship_leaving_cause":"Remains on board",
"this_ship_joining_date":"1850-09-21",
"place_of_birth":"Cardigan",
"additional_notes":"Remains on board",
"signed_with_mark":"N",
"this_ship_capacity":"Mate",
"last_ship_leaving_date":NumberLong(1868),
"last_ship_port":"Cardiff"
},
{
"home_address":"No info",
"name":"Edward Jones",
"last_ship_name":"Naval Reserve",
"this_ship_joining_port":"Liverpool",
"this_ship_leaving_date":"01/03/1879",
"age":"No info",
"this_ship_leaving_cause":"Discharged",
"this_ship_leaving_port":"[Hamburg?]",
"this_ship_joining_date":"1850-09",
"year_of_birth":NumberLong(1855),
"place_of_birth":"Liverpool",
"additional_notes":"Discharged - in hospital",
"signed_with_mark":"Y",
"this_ship_capacity":"$",
"last_ship_leaving_date":NumberLong(1877),
"last_ship_port":"Liverpool"
}
],
"vessel name":"Jane Ellen",
"port of registry":"Holland"
}
Я пытаюсь получить только значения «this_ship_capacity» и записать их в фрейм данных python для анализа, но другие данные продолжают поступать с нужными мне данными. Вот мой запрос:
cursor = db.data.aggregate([
{"$match":{"mariners.this_ship_capacity":{"$exists": "true"}}},
{"$project":{ "_id":0,
"mariners.this_ship_capacity":{
"$filter":{
"input": "$mariners.this_ship_capacity",
"as": "result",
"cond":{"$ne":[{"type":"$mariners.this_ship_capacity"}, "missing"]
}
}
}
}}
])
Вот как выглядит результат:
{u'mariners': [{u'this_ship_capacity': [u'Mate', u'
Мне просто нужны значения Master, Mate и т. Д., А не другие сопутствующие им вещи.
Ответ №1:
попробуйте этот конвейер. если это не ожидаемый результат, дайте мне знать точную форму вывода, который вам нужен.
db.data.aggregate(
[
{
$match: {
"mariners.this_ship_capacity": { $exists: true }
}
},
{
$set: {
mariners: {
$filter: {
input: "$mariners",
as: "m",
cond: { $ne: ["$$m.this_ship_capacity", "missing"] }
}
}
}
},
{
$project: {
_id: 0,
mariners: {
$map: {
input: "$mariners",
as: "m",
in: { this_ship_capacity: "$$m.this_ship_capacity" }
}
}
}
}
]
)
Ответ №2:
Демонстрация - https://mongoplayground.net/p/JMIviVTeAJU
db.collection.aggregate([
{ $unwind: "$mariners" }, // break into individual documents
{ $match: {
$and: [ // filter
{ "mariners.this_ship_capacity": { $exists: true } },
{ "mariners.this_ship_capacity": { $ne: "missing" } }
]
}
},
{ $project: { _id: 0, "this_ship_capacity": "$mariners.this_ship_capacity" } }
])
Вывод
[
{
"this_ship_capacity": "Mate"
},
{
"this_ship_capacity": "$"
}
]
Используйте group, если вы хотите выводить в виде единого массива
Демонстрация - https://mongoplayground.net/p/Am6O6XyIOyi
{
$group: { _id: null, "this_ship_capacity": { $push: "$mariners.this_ship_capacity" } }
}
Вывод -
[
{
"_id": null,
"this_ship_capacity": [
"Mate",
"$"
]
}
]
, u'Master', u'Mate']},
{u'this_ship_capacity': [u'Mate', u'Мне просто нужны значения Master, Mate и т. Д., А не другие сопутствующие им вещи.
Ответ №1:
попробуйте этот конвейер. если это не ожидаемый результат, дайте мне знать точную форму вывода, который вам нужен.
Ответ №2:
Демонстрация - https://mongoplayground.net/p/JMIviVTeAJU
Вывод
Используйте group, если вы хотите выводить в виде единого массива
Демонстрация - https://mongoplayground.net/p/Am6O6XyIOyi
Вывод -
, u'Master', u'Mate']},
{u'this_ship_capacity': [u'Mate', u'
Мне просто нужны значения Master, Mate и т. Д., А не другие сопутствующие им вещи.
Ответ №1:
попробуйте этот конвейер. если это не ожидаемый результат, дайте мне знать точную форму вывода, который вам нужен.
Ответ №2:
Демонстрация - https://mongoplayground.net/p/JMIviVTeAJU
Вывод
Используйте group, если вы хотите выводить в виде единого массива
Демонстрация - https://mongoplayground.net/p/Am6O6XyIOyi
Вывод -
, u'Master', u'Mate']},
{u'this_ship_capacity': [u'Mate', u'Мне просто нужны значения Master, Mate и т. Д., А не другие сопутствующие им вещи.
Ответ №1:
попробуйте этот конвейер. если это не ожидаемый результат, дайте мне знать точную форму вывода, который вам нужен.
Ответ №2:
Демонстрация - https://mongoplayground.net/p/JMIviVTeAJU
Вывод
Используйте group, если вы хотите выводить в виде единого массива
Демонстрация - https://mongoplayground.net/p/Am6O6XyIOyi
Вывод -
, u'Master', u'Mate']}]}
{u'mariners': [{u'this_ship_capacity': [u'Mate', u'
Мне просто нужны значения Master, Mate и т. Д., А не другие сопутствующие им вещи.
Ответ №1:
попробуйте этот конвейер. если это не ожидаемый результат, дайте мне знать точную форму вывода, который вам нужен.
Ответ №2:
Демонстрация - https://mongoplayground.net/p/JMIviVTeAJU
Вывод
Используйте group, если вы хотите выводить в виде единого массива
Демонстрация - https://mongoplayground.net/p/Am6O6XyIOyi
Вывод -
, u'Master', u'Mate']},
{u'this_ship_capacity': [u'Mate', u'Мне просто нужны значения Master, Mate и т. Д., А не другие сопутствующие им вещи.
Ответ №1:
попробуйте этот конвейер. если это не ожидаемый результат, дайте мне знать точную форму вывода, который вам нужен.
Ответ №2:
Демонстрация - https://mongoplayground.net/p/JMIviVTeAJU
Вывод
Используйте group, если вы хотите выводить в виде единого массива
Демонстрация - https://mongoplayground.net/p/Am6O6XyIOyi
Вывод -
, u'Master', u'Mate']},
{u'this_ship_capacity': [u'Mate', u'
Мне просто нужны значения Master, Mate и т. Д., А не другие сопутствующие им вещи.
Ответ №1:
попробуйте этот конвейер. если это не ожидаемый результат, дайте мне знать точную форму вывода, который вам нужен.
Ответ №2:
Демонстрация - https://mongoplayground.net/p/JMIviVTeAJU
Вывод
Используйте group, если вы хотите выводить в виде единого массива
Демонстрация - https://mongoplayground.net/p/Am6O6XyIOyi
Вывод -
, u'Master', u'Mate']},
{u'this_ship_capacity': [u'Mate', u'Мне просто нужны значения Master, Mate и т. Д., А не другие сопутствующие им вещи.
Ответ №1:
попробуйте этот конвейер. если это не ожидаемый результат, дайте мне знать точную форму вывода, который вам нужен.
Ответ №2:
Демонстрация - https://mongoplayground.net/p/JMIviVTeAJU
Вывод
Используйте group, если вы хотите выводить в виде единого массива
Демонстрация - https://mongoplayground.net/p/Am6O6XyIOyi
Вывод -
, u'Master', u'Mate']}]}
Мне просто нужны значения Master, Mate и т. Д., А не другие сопутствующие им вещи.
Ответ №1:
попробуйте этот конвейер. если это не ожидаемый результат, дайте мне знать точную форму вывода, который вам нужен.
Ответ №2:
Демонстрация — https://mongoplayground.net/p/JMIviVTeAJU
Вывод
Используйте group, если вы хотите выводить в виде единого массива
Демонстрация — https://mongoplayground.net/p/Am6O6XyIOyi
Вывод —