标签: objectid

如何在pydantic模型中解析ObjectId?

我正在尝试将 MongoDB 记录解析为 pydantic 模型,但未能这样做 ObjectId

据我了解,我需要为 ObjectId 设置验证器,并尝试扩展 ObjectId 类并validator使用 ObjectId将装饰器添加到我的类中。我做了如下。

from pydantic import BaseModel, validator
from bson.objectid import ObjectId


class ObjectId(ObjectId):
    pass
    @classmethod
    def __get_validators__(cls):
        yield cls.validate
    @classmethod
    def validate(cls, v):
        if not isinstance(v, ObjectId):
            raise TypeError('ObjectId required')
        return str(v)


class User(BaseModel):
    who: ObjectId


class User1(BaseModel):
    who: ObjectId
    @validator('who')
    def validate(cls, v):
        if not isinstance(v, ObjectId):
            raise TypeError('ObjectId required')
        return str(v)

data = {"who":ObjectId('123456781234567812345678')}
Run Code Online (Sandbox Code Playgroud)

不幸的是,两个“解决方案”都失败了,如下所示:

>>> test = User(**data)
Traceback (most recent call last):
  File "<stdin>", …
Run Code Online (Sandbox Code Playgroud)

python parsing mongodb objectid pydantic

7
推荐指数
3
解决办法
4958
查看次数

为什么object_id会在windows上持续存在而不在linux上?

这个计划

class ObjectGarden
    class << self.clone
            puts self.object_id
    end
end

puts ObjectGarden.clone.object_id
Run Code Online (Sandbox Code Playgroud)

在Linux上运行(已在RHEL上测试)object_id在多次运行中生成不同的s,如我所料.但是,当我在Windows上运行它时,我会在多次运行中获得相同的输出.而且不管我做什么(休眠/关机/"臭名昭着的蓝屏"并重启)object_ids都不会改变.

我还注意到,object_id如果我更改了程序的内容(甚至是一个无关紧要的更改,如添加新行或注释),那么在Windows上进行更改.

为什么Windows和Linux实现之间存在这种差异?由于我无法访问OS X,有人可以在Mac上运行它并记录结果.

我在Windows上使用Ruby 1.9.2-p136,在Linux上使用Ruby 1.9.2-p180.

ruby windows objectid

6
推荐指数
1
解决办法
208
查看次数

mongoose 查询:在数组中按 id 查找对象

我怎么能在这个架构中通过 id 找到图像。我有用户的 id 和我正在寻找的图像的 id。什么是最好的方法来做到这一点,并且在这种情况下所有图像都具有不同的 id,或者它们可能具有相同的 id,因为它们不属于同一个用户?

我的架构如下所示:

var userSchema = new Schema({
  local: {
    email: String,
    password: String
  },
  facebook: {
    id: String,
    token: String,
    email: String,
    name: String
  },
  name: String,
  about: String,
  images: [{
    id: Schema.ObjectId,
    link: String,
    main: Boolean
  }]
});
Run Code Online (Sandbox Code Playgroud)

arrays mongoose mongodb objectid

6
推荐指数
1
解决办法
1万
查看次数

如何在节点js中随机生成objectid

我需要在节点js中随机生成objectid.有什么方法可以创建.

node.js objectid

5
推荐指数
2
解决办法
9496
查看次数

meteor 0.5.7:如何处理/使用Meteor.Collection.ObjectID?

我昨天更新了我的流星并尝试使用新的Meteor.Collection.ObjectID.但由于没有成功.首先,我以这种方式更新了我的收藏:

myCollection = new Meteor.Collection('mycollection', {idGeneration: 'MONGO'} 现在,新的正常插入有_idWi2RmR6CSapkmmdfn......(?)

然后我有一个包含数组的集合.我喜欢为这个数组中的每个对象都有一个唯一的id.所以我$push是一个像id: new Meteor.Collection.ObjectID()我的数组一样的字段的对象.数据库中的结果如下:ObjectId("5b5fc278305d406cc6c33756").(这似乎很正常.)

但后来我想更新我推送的对象,如果id等于一个id,我之前将其作为数据属性存储在html标签中.

var equals = EJSON.equals(dbId, htmlId);(这导致每一次false,所以我记录的值dbId,并htmlId与控制台console.log(typeof dbId, dbId);)

这两个变量的值如下:

object { _str: 'a86ce44f9a46b99bca1be7a9' } (DBID)

string ObjectID("a86ce44f9a46b99bca1be7a9") (htmlId;这似乎是正确的,但为什么自定义类型是一个字符串?)

如何使用Meteor.Collection.ObjectID正确?

meteor objectid

5
推荐指数
1
解决办法
3818
查看次数

缩短node.js和mongoose中的ObjectId

我的网址目前看起来像这样:

http://www.sitename.com/watch?companyId=507f1f77bcf86cd799439011&employeeId=507f191e810c19729de860ea&someOtherId=.....
Run Code Online (Sandbox Code Playgroud)

所以,正如你所看到的,它变得非常长,非常快.我在考虑缩短这些ObjectIds.想法是我应该为我的数据库中的每个模型添加名为"shortId"的新字段.所以不要:

var CompanySchema = mongoose.Schema({
  /* _id will be added automatically by mongoose */
  name:         {type: String},
  address:      {type: String},
  directorName: {type: String}
});
Run Code Online (Sandbox Code Playgroud)

我们会这样:

var CompanySchema = mongoose.Schema({
  /* _id will be added automatically by mongoose */
  shortId:      {type: String}, /* WE SHOULD ADD THIS */
  name:         {type: String},
  address:      {type: String},
  directorName: {type: String},
});
Run Code Online (Sandbox Code Playgroud)

我找到了这样做的方法:

// Encode
var b64 = new Buffer('47cc67093475061e3d95369d', 'hex')
  .toString('base64')
  .replace('+','-')
  .replace('/','_')
;
// -> shortID is now: R8xnCTR1Bh49lTad
Run Code Online (Sandbox Code Playgroud)

但我仍然认为它可能更短.

另外,我发现这个npm模块: …

javascript mongoose mongodb node.js objectid

5
推荐指数
1
解决办法
3264
查看次数

在聚合中生成 ObjectID

我有一个名为“人员”的集合(见下文),其中包含他们的个人详细信息和技能。我想从该集合中创建一个新集合(定期更新),其中包含填充了 ObjectID 的特定技能的出现总数。应使用正确的对象 ID 更新人员集合中的技能。

现在我有以下查询:

db.people.aggregate([ 
    { $unwind: "$expertise" },
    { $group : { 
        _id: "$expertise.item",
        count: { $sum: 1 },
        people: { $push: "$_id" } 
        } 
    }
])
Run Code Online (Sandbox Code Playgroud)

这给了我新的集合,但不幸的是我无法在该查询中生成唯一的 objectID。它一直告诉我需要一个累加器对象。

如何生成每个技能具有唯一 ObjectID 的技能数据库,并使用正确的技能 ObjectID更新人员集合?


人们

包含人物、他们的个人详细信息和他们的特定技能的集合。我已经删除了此示例的大部分数据。

{
"_id" : ObjectId("591c5d9be75d8a0d34f61786"),
"id" : 1,
"username" : "user@name.com",
"expertise" : [ 
    {
        "niveau" : 5,
        "item" : "High Availability Systems"
    }, 
    {
        "niveau" : 8,
        "item" : "Object Oriented Design"
    }
], …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework objectid

5
推荐指数
1
解决办法
7721
查看次数

Mongoose:由于值“[5ac5cfb41fca8a22f519cb22]”而无法转换为数组

我试图在现有游戏中插入一个回合,这给了我以下错误:

游戏验证失败:rounds.1.questions:Cast to Array 在路径“questions”处的值“[ 5ac5cfb41fca8a22f519cb22 ]”失败

架构的:

const roundSchema = Schema({
  roundNumber: {
    type: Number,
    required: true,
  },
  categories: {
    type: [String],
    required: true
  },
  questions: {
    type: [Schema.Types.ObjectID],
    ref: 'Question',
    required: true,
  }
});

const gameSchema = Schema({
  code: {
    type: String,
    required: true,
  },
  teams: {
    type: [Schema.Types.ObjectID],
    required: false,
  },
  rounds: [roundSchema]
});

const questionSchema = Schema({
  question: {
    type: String,
    required: true,
  },
  answer: {
    type: String,
    required: true,
  },
  category: {
    type: String,
    required: …
Run Code Online (Sandbox Code Playgroud)

casting mongoose node.js objectid

5
推荐指数
1
解决办法
2396
查看次数

Loopback 4/MongoDB - 外键未转换为 ObjectID

我正在尝试使用 Mongo 数据库建立 hasMany 关系。我已按照环回 4 文档( https://loopback.io/doc/en/lb4/HasMany-relation.html )中的指南创建 hasMany 关系,并尝试设置不同的属性,但外键 custId 保存为字符串而不是 ObjectID。

我还从其他主题中找到了一些其他属性或选项,但人们正在使用 Loopback 3,但它似乎不适用于 Loopback 4。

我错过了什么或者有什么解决方法吗?

这是我的模型:

@model()
export class Order extends Entity {
  @property({
    type: 'string',
    id: true,
    generated: true,
  })
  id: string;

  @property({
    type: 'array',
    itemType: 'string',
    required: true,
  })
  product: string[];

  @property({
    type: 'number',
    required: true,
  })
  price: number;

  @property({
    type: 'string',
    id: true,
    generated: true,
  })
  custId: string;

  constructor(data?: Partial<Order>) {
    super(data);
  }
}


@model()
export class Customer extends Entity { …
Run Code Online (Sandbox Code Playgroud)

loopback mongodb objectid loopbackjs

5
推荐指数
1
解决办法
2248
查看次数

如何验证 ObjectID

使用 Joi 模式验证,是否可以针对 MongoDB ObjectID 进行验证?

像这样的事情可能很棒:

_id: Joi.ObjectId().required().error(errorParser),
Run Code Online (Sandbox Code Playgroud)

mongodb objectid joi

5
推荐指数
2
解决办法
4443
查看次数