【发布时间】: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类型。