【问题标题】:How do I get a value array instead a json array in mongo/node/mongoose?如何在 mongo/node/mongoose 中获取值数组而不是 json 数组?
【发布时间】:2012-01-05 15:54:42
【问题描述】:

我正在尝试模拟 mongo 查询中的联接,因此我将获取第一个查询的结果,然后将其作为 $in 过滤器传递给我的第二个查询。

不幸的是,我的第一个查询的结果返回了一个像这样的 json 对象数组

[ { _id: 4ecd830da046050100000025 },
  { _id: 4ecd84a0a046050100000085 } ]

并且 $in 过滤器不返回任何内容,因为它们是 json 对象而不是值数组。我可以手动转换该数组,但是否有可以使用的内置方法或函数?另外,有没有办法让 mongo 返回值数组?目前我正在调用查找查询

Likes.find {liker:"Me"}, {_id:1}, {safe:true}

这是我的第二个查询

Post.find {_id:{$in:likes}}

我希望有类似的东西

Post.find {_id:{$in:likes._id}}

【问题讨论】:

    标签: mongodb node.js mongoose


    【解决方案1】:

    虽然在 $in 子句的情况下您的问题没有通用解决方案,但您可以使用不同操作的结果:

    > db.test.save({a:1})
    > db.test.save({a:2})
    > db.test.save({a:3})
    > db.test.save({a:4})
    
    > ids = db.test.distinct("_id", {a:{$gt:2}})
    [
            ObjectId("4ece45c2c951f11718678574"),
            ObjectId("4ece45c4c951f11718678575")
    ]
    
    > db.test.find({_id:{$in:ids}})
    { "_id" : ObjectId("4ece45c2c951f11718678574"), "a" : 3 }
    { "_id" : ObjectId("4ece45c4c951f11718678575"), "a" : 4 }
    

    希望有帮助!

    【讨论】:

    • 酷,这行得通……这种技术在性能方面如何? mongo 中的不同查询真的很快吗?
    • 如果被索引,它们相对较快是的。因为 distinct 操作的查询子句显着减少了候选集,所以它应该相对接近您的原始解决方案。 Distinct 总是需要对候选集进行全面扫描,只要你保持相对较小,你就是黄金。祝你好运。
    • 如果索引是唯一索引,则只需返回 btree 中的每个节点,而无需检查它们是否唯一,该操作可能会更快。
    • 非常正确。 unique=true 索引将显着帮助不同的操作。
    猜你喜欢
    • 2021-02-11
    • 2020-03-01
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多