【问题标题】:Find where array contains value查找数组包含值的位置
【发布时间】:2012-11-20 03:34:39
【问题描述】:

假设您有装有物品的盒子。每个项目可能在多个盒子中,因此每个项目都有一个 ID 数组,用于该项目所在的盒子。

childA= {...boxIds: ['000001', '000002', '000003']...}

在 mongodb 中,您可以说 child.find({boxIds:'000002'}) 来获取 childA 以及 000002 在 boxIds 数组中的所有其他孩子。 这是我在猫鼬(coffeescript)中尝试过的:

  data = boxIds: box._id
  Child.find data, (err, children) -> doSomething

我总是得到一个空的结果。找不到问题还是猫鼬不支持这种类型的查询?

编辑

Child = new mongoose.Schema
  ...
  boxIds: Array
  ...

box._id 是普通的 mongodb id 字符串

mongodb 中的示例查询:db.child.find( {boxIds: '50bb5d10ba1e232401000002'} )

结果:......., "boxIds" : [ "50bb5d10ba1e232401000002" ], .....

EDIT2

难道_id不是字符串?

【问题讨论】:

  • Mongoose 可以支持 MongoDB 可以支持的任何查询。通常,像您这样的空结果问题归结为模式中的类型与数据库中的类型不匹配。您可以将您的架构和示例文档添加到您的问题中吗?

标签: mongodb mongoose coffeescript


【解决方案1】:

问题是box._id是一个ObjectId,但ChildboxIds数组字段包含字符串。

试试这个:

data = boxIds: box._id.toString()
Child.find data, (err, children) -> doSomething

另一种选择是将 boxIds 定义为架构中的字符串数组,然后 Mongoose 将为您进行必要的转换:

Child = new mongoose.Schema
  ...
  boxIds: [String]
  ...

【讨论】:

  • 是的,完全是,我决定反过来,像这样定义我的模式:boxIds: [mongoose.Schema.Types.ObjectId]。铸造也是自动完成的。谢谢!
猜你喜欢
  • 2018-09-19
  • 2022-01-01
  • 1970-01-01
  • 2017-12-16
  • 2017-05-01
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多