{ "@context": "https://schema.org", "@type": "Article", "headline": "为何我的 mongodb 查询没有结果?", "datePublished": "2024-03-09T17:36:27", "dateModified": "2024-03-09T17:36:27", "description": "本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《为何我的 mongodb 查询没有结果?》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~问题内容这是我的数据库集合:通过这个 go 代码,我尝试获取所有参与故事或使用给定 id 创建故事的用户。func main() { for stf.DB == nil { } collection := stf.DB.Collection(user) ctx, cancel := context.", "publisher": { "@type": "Organization", "name": "Golang学习网", "url": "https://m.17golang.com" }, "mainEntityOfPage": { "@type": "WebPage", "@id": "https://m.17golang.com/article/106819.html" } }
登录
首页 >  Golang >  Go问答

为何我的 mongodb 查询没有结果?

来源:stackoverflow

时间:2024-03-09 17:36:27 258浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《为何我的 mongodb 查询没有结果?》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

这是我的数据库集合:

通过这个 go 代码,我尝试获取所有参与故事或使用给定 id 创建故事的用户。

func main() {
    for stf.DB == nil {
    }

    collection := stf.DB.Collection("user")
    ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
    defer cancel()

    id, _ := primitive.ObjectIDFromHex("5cb4dd7e29d3dca573a73d4c")
    fter := bson.M{"_id": id}

    involvedFilter := bson.M{"stories_involved": fter}
    createdFilter := bson.M{"stories_created": fter}

    filter := bson.M{"$or": []bson.M{involvedFilter, createdFilter}}

    cur, err := collection.Find(ctx, filter)
    if err != nil {
        log.Fatal(err.Error())
    }

    defer cur.Close(ctx)

    for cur.Next(ctx) {
        var result bson.M
        err := cur.Decode(&result)

        if err != nil {
            log.Fatal(err.Error())
        }
        fmt.Println(result)
    }
    if err := cur.Err(); err != nil {
        log.Fatal(err.Error())
    }
}

该代码不会输出任何错误,但它也不会输出任何对象......

提前感谢您的帮助!


解决方案


您的查询翻译为:

{"$or":[
   {"stories_involved":{
           "_id": objectid("5cb4dd7e29d3dca573a73d4c")}}, 
   {"stories_created":{
           "_id":objectid("5cb4dd7e29d3dca573a73d4c")}}
]}

这意味着它正在搜索带有嵌套文档的文档 即:

{涉及的故事:{_id:}}{创建的故事:{_id:}}

但是,集合中的文档包含嵌套文档数组,即:

{stories_involved: [{_id:}]}{stories_created: [{_id:}]}

这就是您的查询未返回任何值的原因(并且没有错误,因为查询语法是正确的)。

Querying a document nested in an array 使用 dot notation 有两种方法。如果您知道文档数组的索引,则只需指定位置即可:

id, _ := primitive.objectidfromhex("5cb4dd7e29d3dca573a73d4c")
involvedfilter := bson.m{"stories_involved.0._id": id}
createdfilter := bson.m{"stories_created.0._id": id}
filter := bson.m{"$or": []bson.m{involvedfilter, createdfilter}}
cur, err := collection.find(ctx, filter)

如果您不知道数组中嵌套文档的索引位置,请将数组字段的名称用点 (.) 与嵌套文档中的字段名称连接起来:

id, _ := primitive.ObjectIDFromHex("5cb4dd7e29d3dca573a73d4c")
involvedFilter := bson.M{"stories_involved._id": id}
createdFilter := bson.M{"stories_created._id": id}
filter := bson.M{"$or": []bson.M{involvedFilter, createdFilter}}
cur, err := collection.Find(ctx, filter)

另请参阅 MongoDB: Query Documents

今天关于《为何我的 mongodb 查询没有结果?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>