为什么我插入的模型ID不是字符串,以及如何使用该值进行搜索?

时间:2016-08-11 20:54:22

标签: mongodb meteor

我测试了在MongoDB中保存文档,并意识到_id不是字符串,而是{ _str: "57aa1b4ea70ce79ff699fa17" }

对象

该怎么办?为什么它不是一个字符串?

***编辑

如何使用此值进行搜索?例如:

let id = 'ObjectID("57aa1b4ea70ce79ff699fa17")';

return FooCollection.find( id );  // ??? returns nothing!

ìd值由客户端(即model._id)传递给订阅,我需要使用该值过滤集合。但是,它什么都不返回,显然是(?)。

1 个答案:

答案 0 :(得分:0)

假设我们在mongoDB中有两个文件:

/* 1 */
{
  "_id" : ObjectId("57ac2e768408012ccd000c7f"),
  "max" : "3.4.6",
  "min" : "1.10.2"
}

/* 2 */
{
  "_id" : ObjectId("57ac2e768408012ccd000c80"),
  "max" : "10.9.12",
  "min" : "6.90.1"
}

(1)如果您使用的是Node.JS& Mongoose,可以通过字符串查询_id。例如,在node.Js中:

var model = testModel.getTestModel(conn);

    var query = {
        _id: '57ac2e768408012ccd000c7f'
    };


    model
            .find(query)
            .exec(function(err, docs) {
                if (err) {
                    console.log(err);
                } else {
                    console.log(docs);
                    mongoHelper.disconnectMongoDB(conn);
                }
            });

然后输出是:

[ { min: '1.10.2', max: '3.4.6', _id: 57ac2e768408012ccd000c7f } ]
mongo connection closed

(2)但是如果您使用的是mongoDB Shell,则需要使用 ObjectId - mongoDB中包含唯一十六进制字符串的特殊对象类型

db.test.find({
    _id: ObjectId('57ac2e768408012ccd000c7f')
});