Сначала используйте bson.D {} вместо bson.M {} . Это связано с тем, что bson.D{}
следует использовать в ситуациях, где важен порядок, таких как команды MongoDB.
Вы также можете инкапсулировать весь конвейер в mongo.Pipeline . Например:
pipeline := mongo.Pipeline{
{{"$match", bson.D{{"createdata", 10}}}},
{{"$group", bson.D{
{"_id", bson.D{{"type", "$type"}}},
{"TotalFeeds", bson.D{{"$sum", 1}}},
}}},
{{"$project", bson.D{
{"type", " Сначала используйте bson.D {} вместо bson.M {} . Это связано с тем, что bson.D{}
следует использовать в ситуациях, где важен порядок, таких как команды MongoDB.
Вы также можете инкапсулировать весь конвейер в mongo.Pipeline . Например:
[110] Проверьте ваше Feeds{}
отображение структуры. Убедитесь, что либо вы указали отображение bson
, то есть:
type Feeds struct {
Type string `bson:"type"`
TotalFeeds int `bson:"TotalFeeds"`
}
, либо на этапе проецирования $project
вы используете согласованный корпус для полей. Например, укажите все строчные буквы type
и totalfeeds
или все прописные буквы Type
и TotalFeeds
.
pipeline := mongo.Pipeline{
{{"$match", bson.D{{"createdata", 10}}}},
{{"$group", bson.D{
{"_id", bson.D{{"type", "$type"}}},
{"totalfeeds", bson.D{{"$sum", 1}}},
}}},
{{"$project", bson.D{
{"type", " Сначала используйте bson.D {} вместо bson.M {} . Это связано с тем, что bson.D{}
следует использовать в ситуациях, где важен порядок, таких как команды MongoDB.
Вы также можете инкапсулировать весь конвейер в mongo.Pipeline . Например:
[110] Проверьте ваше Feeds{}
отображение структуры. Убедитесь, что либо вы указали отображение bson
, то есть:
[111] , либо на этапе проецирования $project
вы используете согласованный корпус для полей. Например, укажите все строчные буквы type
и totalfeeds
или все прописные буквы Type
и TotalFeeds
.
[112] Тогда вам не нужно указывать отображение bson
в структуре:
type MyStruct struct {
Type string
Total int
}
Так что либо используйте непротиворечивые случаи имен полей в вашей структуре, либо явно предоставьте bson
картирование.
id.type"},
{"totalfeeds", "$totalfeeds"},
{"_id", 0}},
}},
}
Тогда вам не нужно указывать отображение bson
в структуре:
type MyStruct struct {
Type string
Total int
}
Так что либо используйте непротиворечивые случаи имен полей в вашей структуре, либо явно предоставьте bson
картирование.
id.type"},
{"TotalFeeds", "$TotalFeeds"},
{"_id", 0}},
}},
}
Проверьте ваше Feeds{}
отображение структуры. Убедитесь, что либо вы указали отображение bson
, то есть:
type Feeds struct {
Type string `bson:"type"`
TotalFeeds int `bson:"TotalFeeds"`
}
, либо на этапе проецирования $project
вы используете согласованный корпус для полей. Например, укажите все строчные буквы type
и totalfeeds
или все прописные буквы Type
и TotalFeeds
.
pipeline := mongo.Pipeline{
{{"$match", bson.D{{"createdata", 10}}}},
{{"$group", bson.D{
{"_id", bson.D{{"type", "$type"}}},
{"totalfeeds", bson.D{{"$sum", 1}}},
}}},
{{"$project", bson.D{
{"type", " Сначала используйте bson.D {} вместо bson.M {} . Это связано с тем, что bson.D{}
следует использовать в ситуациях, где важен порядок, таких как команды MongoDB.
Вы также можете инкапсулировать весь конвейер в mongo.Pipeline . Например:
[110] Проверьте ваше Feeds{}
отображение структуры. Убедитесь, что либо вы указали отображение bson
, то есть:
[111] , либо на этапе проецирования $project
вы используете согласованный корпус для полей. Например, укажите все строчные буквы type
и totalfeeds
или все прописные буквы Type
и TotalFeeds
.
[112] Тогда вам не нужно указывать отображение bson
в структуре:
type MyStruct struct {
Type string
Total int
}
Так что либо используйте непротиворечивые случаи имен полей в вашей структуре, либо явно предоставьте bson
картирование.
id.type"},
{"totalfeeds", "$totalfeeds"},
{"_id", 0}},
}},
}
Тогда вам не нужно указывать отображение bson
в структуре:
type MyStruct struct {
Type string
Total int
}
Так что либо используйте непротиворечивые случаи имен полей в вашей структуре, либо явно предоставьте bson
картирование.
Одно различие, о котором я знаю, то, что именованные каналы в соответствии с Linux являются фактическими записями в файловой системе (Вы будете видеть его в списке каталогов, у них есть специальный тип), тогда как в Windows они хранятся в некотором волшебном репозитории где-нибудь (к ним все получают доступ через путь "\\.\pipe \".
, Во-вторых, в Linux Вы можете просто запись-чтение от каналов, как будто они были любым другим файлом, с помощью стандартного файла методы IO. Принимая во внимание, что на окнах, необходимо использовать специальные функции 'Канала', которые являются частью API Win32.
мне нравится метод Linux лучше, потому что он позволяет мне использовать каналы с любым приложением, которое я хочу. Например:
mkfifo pipe.wav
decodeMP3 song.mp3 --out pipe.wav &
encodeAVI video.mpeg pipe.wav --out video.avi
Это позволяет мне передать вывод по каналу декодера MP3 непосредственно в видеодекодер, вместо того, чтобы иметь необходимость сначала декодировать весь MP3 в файл WAV на диске. Удобно, если у Вас есть двухъядерный ЦП, потому что тогда Вы выполняете обе операции сразу для хорошего ускорения.
В соответствии с Linux (и *ix в целом), "все - файл". Можно считать/писать/искать каналы и сокеты и устройства без ограничений, поскольку те операции имеют смысл.
принимая во внимание, что Windows имеет намного меньше унифицированной архитектуры для этих различных типов объектов. Хотя я не мог сказать Вам детали, я знаю, что буферизация каналов значительно отличается между Windows и Linux, таким образом, можно столкнуться с трудностями там.
кроме того, одно общее использование Unix-y каналов к fork()
подпроцесс, и затем свяжитесь с ним через канал (родитель открывает один конец, ребенок открывает другой конец). В соответствии с Windows, такая вещь просто не возможна. Механизмы IPC очень отличаются.
См. также предыдущее сообщение:
, Что такое именованные каналы?
, Который содержит мое взятие и несколько других народов