【问题标题】:How to iterate through an array in order to query a particular key in Mongo?如何遍历数组以查询 Mongo 中的特定键?
【发布时间】:2018-01-06 08:52:05
【问题描述】:

我有一个数字数组。我想将数组中的每个项目与集合的特定键的所有值进行比较。那可能吗?在下面的示例中,我将仅抓取 id 为 05、07、21、36 和 42 的那些对象。但此尝试失败 -

var playlist =[05,07,21,36,42]

查询:

Track.find({ id: playlist })...

收藏:

artist:{type: String}, 
title: {type: String},
id: {type: String}... 

该属性实际上是 "_id" -- Track.find({ "_id": {$in: playlist} }) -- 当我尝试这个时,我得到了下面打印的错误。有任何想法吗?

消息: '投射到的ObjectId在路径失败值 “597e2f68c83f5d5ba6723427,597e2f68c83f5d5ba6723429,597e2f68c83f5d5ba672342c,597e2f68c83f5d5ba6723429,597e2f68c83f5d5ba672342c,597e2f68c83f5d5ba672342b,597e2f68c83f5d5ba672342d” “_id” 为模型 “音轨”', 名称:'CastError', stringValue的: ' “597e2f68c83f5d5ba6723427,597e2f68c83f5d5ba6723429,597e2f68c83f5d5ba672342c,597e2f68c83f5d5ba6723429,597e2f68c83f5d5ba672342c,597e2f68c83f5d5ba672342b,597e2f68c83f5d5ba672342d”', 种类:'ObjectId', 值: '597e2f68c83f5d5ba6723427,597e2f68c83f5d5ba6723429,597e2f68c83f5d5ba672342c,597e2f68c83f5d5ba6723429,597e2f68c83f5d5ba672342c,597e2f68c83f5d5ba672342b,597e2f68c83f5d5ba672342d', 路径:'_id',

【问题讨论】:

  • 所有 MongoDB 文档 总是 都有一个 _id 字段,“默认”是 ObjectId 而不是“字符串”。 Mongoose默认将此属性“别名”为id,所以这里的问题是Mongoose不理解您的意思是“覆盖”该属性并试图“转换”为ObjectId类型,并且数据无效对于那种类型。如果您打算“覆盖”,那么您需要使用{ "_id": false } 作为选项告诉架构。即Schema({ artist: String, title: String, _id: String },{ _id: false })。然后猫鼬知道改用定义的String
  • 这对var playlist =[05,07,21,36,42] 有效,正如您在问题中定义的那样。但 实际错误消息 表明实际上您正在发送“逗号分隔值字符串”。因此,您将 .split() 将“字符串”添加到数组中。 .find({ "_id": { "$in": playlist.split(/,/) } }) 当然不要然后在模式中定义id: String,因为这些值实际上是ObjectId 类型。

标签: mongodb mongoose


【解决方案1】:

您需要使用 $in。试试Track.find({ id: { $in: playlist } })

Mongo $in Operator

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    相关资源
    最近更新 更多