【发布时间】:2018-09-28 16:42:05
【问题描述】:
我想获取具有多个条件的 mongodb 集合,但出现错误:
panic: Failed to parse: filter: [ { visibility: { $eq: "4" } }, {
discontinued: { $ne: "1" } }, { status: { $eq: "1" } } ]. 'filter' field
must be of BSON type Object.
代码如下:
package main
import (
"fmt"
"gopkg.in/mgo.v2/bson"
)
func GenerateFeed(headers, attributes interface{}, conditions
[]interface{}) {
var operations = []bson.M{}
for _, val := range conditions {
var attr, operator, value interface{}
cons := val.(map[interface{}]interface{})
for range cons {
attr = cons["attribute"]
operator = cons["operator"]
value = cons["value"]
switch operator {
case "==":
operator = "$eq"
case "!=":
operator = "$ne"
case "()":
operator = "$in"
}
}
operations = append(operations, bson.M{attr.(string):
bson.M{operator.(string): value}})
}
var products []Prod
session := Connect()
collection := session.DB("rfgv2").C("catalog_product_entity_1")
err := collection.Find(operations).All(&products)
CheckError(err)
fmt.Println(products)
}
type Prod struct {
EntityId string `bson:"entity_id"`
Name string `bson:"name"`
TypeId string `bson:"type_id"`
Sku string `bson:"sku"`
Manufacturer int32 `bson:"manufacturer"`
Status int32 `bson:"status"`
Visibility int32 `bson:"visibility"`
EnableGoogleCheckout int32 `bson:"enable_google_checkout"`
Delivery string `bson:"delivery"`
MetaTitle string `bson:"meta_title"`
MetaDescription string `bson:"meta_description"`
Image string `bson:"image"`
SmallImage string `bson:"small_image"`
Thumbnail string `bson:"thumbnail"`
Gallery string `bson:"gallery"`
UrlKey string `bson:"url_key"`
UrlPath string `bson:"url_path"`
Mpn string `bson:"mpn"`
ProductListingAds string `bson:"product_listing_ads"`
Color string `bson:"color"`
Price float32 `bson:"price"`
Cost float32 `bson:"cost"`
TierPriceForBundle float32 `bson:"tier_price_for_bundle"`
RegularPrice float32 `bson:"regular_price"`
SpecialFromDate string `bson:"special_from_date"`
Description string `bson:"description"`
MetaKeyword string `bson:"meta_keyword"`
Dimensions string `bson:"dimensions"`
Features string `bson:"features"`
DeliveryPopupMessage string `bson:"delivery_popup_message"`
CreatedAt string `bson:"created_at"`
UpdatedAt string `bson:"updated_at"`
}
我正在尝试使用 go 从 mongodb 获取基于多个聚合函数的记录。基本上如果我们删除方括号并尝试使用 mongo 命令它可以工作,但是如何在 go 中解决这个问题?
谢谢。
【问题讨论】:
-
可以帮到你吗please visit
-
尝试将“”添加到运算符。将 operator =
$eq更改为 operator ="$eq"类型 bson.M 是 map[string]interface{} 并且在您的致命日志错误中出现 $eq 而不是 "$eq" 参考:godoc.org/gopkg.in/mgo.v2/bson#M -
输出格式如下:[]bson.M 以如下格式出现:[{discontinued: { $eq: "1" } }, { status: { $eq: "1" } } , { visibility: { $eq: "4" } }],虽然是必需的,但正确的格式是:{discontinued: { $eq: 1 } }, { status: { $eq: 1 } }, { visibility: { $当量:4 } }