gpt4 book ai didi

javascript - 在 Mongoose 查询中使用变量作为属性名称未返回正确结果

转载 作者:行者123 更新时间:2023-11-30 17:07:10 25 4
gpt4 key购买 nike

我正在尝试使用 Mongoose 获取具有特定属性的文档的数量,并且出于某种原因,如果我在循环内使用变量作为属性名称,它将不会返回正确的值。例如,下面的代码本身就可以正常工作:

Artist.count({lyric_soprano: true}, function(err, count) {
console.log(count); // 17
});

当我在循环中输入属性名称时它也有效,如下所示:

var voices = ["lyric_soprano"];

async.map(voices, function(voiceType, callback) {
console.log(voiceType); // "lyric_soprano"
console.log(typeof voiceType); // String
console.log(voiceType == "lyric_soprano"); // true
Artist.count({lyric_soprano: true}, function(err, count) {
console.log(count); // 17
callback(null, count);
});
}, function(err, results) {
console.log(results); // [[17]]
});

但是,当我实际使用迭代器变量作为属性名称时(我需要这样做,因为我将使用更大的语音类型列表来执行此操作),它没有给我正确的答案。

var voices = ["lyric_soprano"];

async.map(voices, function(voiceType, callback) {
console.log(voiceType); // "lyric_soprano"
console.log(typeof voiceType); // String
console.log(voiceType == "lyric_soprano"); // true
Artist.count({voiceType: true}, function(err, count) {
console.log(count); // 0
callback(null, count);
});
}, function(err, results) {
console.log(results); // [[0]]
});

最佳答案

您需要更改代码:

Artist.count({voiceType: true}, function(err, count) {...}

作为,

var query = {};
query[voiceType] = true;
Artist.count(query, function(err, count) {...}

这是必需的,因为在 java 脚本中,当创建一个包含键值对的 Object 时,keys 被强制转换为 String 类型.

因此,{voiceType: true} 实际上会解析为 {"voiceType": true},导致查询返回 0 条记录。

相比之下,当您将值分配为 query[voiceType] = true; 时,变量 voiceType 首先解析为 lyric_soprano 并且然后设置为对象,并导致查询获取正确的行数。

关于javascript - 在 Mongoose 查询中使用变量作为属性名称未返回正确结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27763228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com