4

这是我尝试过的原始代码:

obj = {
    sentence:  "this is a sentece", 
    tags: [ "some", "indexing", "words"]     
}

findOne({tags: "words"}).name);

我使用TMongWire作为 MongoDB for Delphi 的包装器,我写了这个:

//var
//  d:IBSONDocument;
d:=BSON([
    'id',mongoObjectID,
    'sentence', 'this is a sentece',
    'tags','["some", "indexing", "words"]'
]);
FMongoWire.Insert(theCollection,d);

似乎上面的代码可以完成工作


但是当我用“标签”查询时,它似乎对我不起作用

//var 
//q:TMongoWireQuery;
//qb:IBSONDocument 
qb:=BSON(['tags', '"words"']); //***
q:=TMongoWireQuery.Create(FMongoWire);
q.Query(mwx2Collection, qb); //***

如何用*星号写两行?

4

2 回答 2

6

错误不在查询中,在字段创建中。

在您编写它时,您将 tags 字段创建为字符串属性,而不是字符串数组。

d:=BSON([
    'id',mongoObjectID,
    'sentence', 'this is a sentece',
    'tags',VarArrayOf(['some', 'indexing', 'words'])
]);
FMongoWire.Insert(theCollection,d);

您必须调用VarArrayOf()以创建字符串数组。

编辑:介绍VarArrayOf()

于 2012-07-08T14:43:12.327 回答
3

TMongoWire 尝试充分利用 OleVariant,因此您将数组作为变体数组传递,例如使用VarArrayOf

FMongoWire.Insert(theCollection,BSON([
    'id',mongoObjectID,
    'sentence', 'this is a sentece',
    'tags',VarArrayOf(['some', 'indexing', 'words'])
]);

并且没有字符串的javascript符号解析,所以写:

q.Query(mwx2Collection, BSON(['tags','words']));
于 2012-07-09T06:02:05.957 回答